Specified key was too long; max key length is 767 bytes のエラーが出た。


Specified key was too long; max key length is 767 bytes のエラーが出た。 | Bamboo lath 日々の記録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)」にする対応で完璧ということでは無さそうですね。

コメントを残す

メールアドレスが公開されることはありません。