MySQLでCREATE文作って流し込もうとしたら以下のエラーが出た。
ERROR 1071 (42000) at line xx: Specified key was too long; max key length is 767 bytes
ちなみに流し込もうとしたSQLは以下
CREATE TABLE IF NOT EXISTS `xxx`.`tag_type` ( `id` INT NOT NULL , `type` VARCHAR(256) NOT NULL , PRIMARY KEY (`id`) , UNIQUE INDEX `id_UNIQUE` (`id` ASC) ), UNIQUE INDEX `type_UNIQUE` (`type` ASC) ) ENGINE = InnoDB COMMENT = 'xxxx';
そもそもtype列をUNIQUEにしなくて良かったのでUNIQUEの指定を外して
エラーがでなくなったのだけど、気になったので少し調べたら色々でた。
MySQL:Specified key was too long; max key length is 767 bytes
■[mysql][memo]MySQLのUNIQUEなINDEXには長さ767byteまでしか使えない件と対策
要するにPRIMARY KEYとUNIQUE KEYが駄目で、767で駄目と言われてしまうのは
最大が767byteなの対してutf8のため1文字3byteとなり、合計で256*3=768byteになるかららしい。
MySQL6以降はutf8が4byteになるため
ということも書いてあるので「VARCHAR(255)」にする対応で完璧ということでは無さそうですね。