今更ながら "Index column size too large. The maximum column size is 767 bytes." に遭遇した
Symfony、というかDoctrineでmigrateしたら、うっかり以下のようなエラーに遭遇。
Index column size too large. The maximum column size is 767 bytes.
utf8mb4だと、varchar(255)とかインデックス張ると767バイト超えてしまって失敗してしまうっていうやつ。
これを解消しようと思うと、innodb_large_prefix
を有効にすればいいのだけど、そのためにはinnodb_file_format
をBarracuda
にして、テーブルのROW_FORMAT
をDYNAMIC
(COMPRESSED
でもいい)にしなきゃいけない。
ということで、*.cnf
に以下を追記。
innodb_large_prefix = 1 innodb_file_format = Barracuda innodb_file_format_max = Barracuda
で、マイグレーションファイルを開いて、$this->addSql('CREATE TABLE ...')
の末尾にROW_FORMAT=DYNAMIC
を付け足したり、$this->addSql('ALTER TABLE foo ROW_FORMAT=DYNAMIC;')
の一行を追加したりとか、状況に応じてすればいい。