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

  • 相关阅读:
    【布局】483- 推荐 15 种水平垂直居中布局方案
    【Web技术】482- 浏览器将标签转成 DOM 的过程
    int和Integer的区别
    Rendom类
    java注释
    linux
    AI
    重载和重写
    Iterator接口
    集合和数组的区别
  • 原文地址:https://www.cnblogs.com/ch459742906/p/7119222.html
Copyright © 2020-2023  润新知