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着手,限定前缀索引的长度,

posted @ 2017-07-05 10:22  toDoYourBest  阅读(413)  评论(0编辑  收藏  举报