Specified key was too long; max key length is 1000 bytes
今天,在建表时,出现了一个错误:
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `qpr_roles` add
unique `roles_name_unique`(`name`))
从来没遇到过...于是就查资料:
关于mysql索引
关于前缀索引
以上是参考文章,我总结一下,原因就是:
1.我的表使用的字符集是utf8mb4
,每个字符是4个字节的,
2我在建表的时候,也没有限定name字段的长度,从而使用默认长度255
3.我在建立name字段的索引(role_name_unique)的时候,由于没有指定索引的长度(index prefix length),所以默认是 整个字段都索引.
这三个原因,导致,索引的长度是255*4=1020.
而索引的长度是有限定的,这个具体值要根据表引擎判定,我的表引擎是myisam,这种引擎的索引长度最大为1000,1020>1000,根据查阅资料,对于MySQL v5.7.7 以下的版本和MariaDB,超出时会报错,恰好我用的MariaDB
解决方法1:从字段长度着手,限定字段的长度到合适值
解决方法2:从索引的index prefix length着手,限定前缀索引的长度,