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 以前のみ)。必要なら列の文字セット/長さを見直す。
同じデータベースの他の項目
- 1048Column 'x' cannot be null(列は NULL にできない)
- 1292Incorrect datetime value / truncated incorrect value(日時の値が不正 / 不正な値の切詰め)
- 1406Data too long for column(列に対してデータが長すぎる)
- 1050Table already exists(テーブルがすでに存在する)
- 1051Unknown table 'x'(不明なテーブル)
- 1091Can't DROP 'x'; check that column/key exists(DROP できない。列/キーの存在を確認)
- 1093You can't specify target table 'x' for update in FROM clause(FROM 句で更新対象テーブルは指定できない)