今天在使用mysql新建立表時報Specified key was too long; max key length is 767 bytes 。
該問題是由鍵值字段長度過長致使。mysql支持數據庫表單一鍵值的最大長度不能超過767字節,超出這個長度即報錯(見標題名稱)。通常狀況下,不會有鍵值字段的長度會超出該長度。可是須要注意的是,隨着全球化進程的加快,數據庫表採用UTF-8格式的趨勢是愈來愈明顯,這致使varchar類型字段的長度成倍增加,一不當心就容易出現以上問題。
假設存在如下表定義:
create table test (
name varchar(256) not null primary key,
age int unsigned not null
) engine = InnoDB;
當使用UTF-8且在innodb格式創建該表時,就會出現如標題所示問題。關鍵緣由是UTF-8使用變長編碼,最多可能使用3個字節表示表示1個符號。因此對於上述表中的name字段,其實際長度超出767字節,達到了768字節,問題出現。若是把長度改成255則沒有問題,或者不使用utf-8格式也沒有問題,再或把engine修改成MyISAM也能夠。