MySQLのInnoDBストレージエンジンのテーブルの長いvarcharカラムを含むカラムにインデックスを生成しようとしたことがあれば、このエラーを見たことがあるだろう。
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
文字数制限は、使っている文字コードに依存する。例えば latin1
であればインデックスを生成できる最大カラムは varchar(767)であるが、
utf8 の場合は varchar(255) までである。
インデックスあたり、3072バイトという別の制限もある。767バイトはカラムごとの制限なので、複数のカラムを(それぞれが767バイト以下で)3072バイトまで格納できる。
(MyISAMは少々異なり、インデックスに対し1000バイトの制限があり、カラムごとの制限はない)。
…
[さらに読む]