DBAtlas · データベース運用アトラス

1071: Specified key was too long; max key length is 767 bytes(キーが長すぎる)

MySQL

意味

作成しようとしたインデックス (またはキー) が許可される最大バイト長を超えた。特にマルチバイト文字セットでは、VARCHAR のインデックスはすぐにこの上限に達する。

原因

utf8mb4 (1 文字 4 バイト) の幅の広い VARCHAR 列へのインデックス、古い InnoDB 行フォーマット (REDUNDANT/COMPACT。5.7 以前では innodb_large_prefix の無効化も)、複数列の複合インデックスの合計長が上限を超える、大きな主キー。

対処方法

インデックス対象の列長を短くするか、プレフィックスインデックスを使う: CREATE INDEX idx ON my_table (my_column(191)); DYNAMIC/COMPRESSED 行フォーマットで 3072 バイトの上限に移行する (MySQL 8.0 では DYNAMIC がデフォルト。innodb_large_prefix は 8.0 で削除されており、必要なのは 5.7 以前のみ)。必要なら列の文字セット/長さを見直す。

DBAtlas で開く →

同じデータベースの他の項目