コピペコードで快適生活

明日使えるソースを自分のために

Specified key was too long; max key length is 1024 bytes

Rails×MySQL環境下でindex作成時にエラーしてmigrateが止まった。 indexの最大幅を超えてたみたい。

Specified key was too long; max key length is 1024 bytes

migrationファイルを修正して対応した。以下メモ。

VARCHAR(255)

https://dev.mysql.com/doc/refman/5.6/ja/string-type-overview.html MySQL は、文字カラム定義の長さ指定を文字単位で解釈します。これは、CHAR、VARCHAR、および TEXT 型に適応されます。 → VARCHAR(255)は、255文字まで入る。(255byteではない)

RailsMigrationFileではlimit値で長さ指定ができる

change_column :table_name, :col_name, :string, {
  null: false, default: '', limit: 80 # limitで指定すればいい
}

文字コード別: 1文字あたりのバイト数

UTF-8: 最大3バイト
utf8mb4(UTF-8に補助文字を足したもの): 最大4バイト
EUC: 最大3バイト
https://dev.mysql.com/doc/refman/5.6/ja/charset-unicode-utf8mb4.html https://software.fujitsu.com/jp/manual/manualfiles/m150018/b1ws1136/04z200/b1136-i-03-04.html

参考

https://hit.hateblo.jp/entry/mysql/indexes/maxlength