zoukankan      html  css  js  c++  java
  • 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着手,限定前缀索引的长度,

  • 相关阅读:
    最后之作-Last Order(bushi
    Hydra's plan
    CSP-S2019游记
    题解 P1407
    初赛排序知识
    题解 洛谷P3469
    二分图网络流知识总结
    题解 SGU294 He's Circles
    noip复习——逆元
    noip复习——线性筛(欧拉筛)
  • 原文地址:https://www.cnblogs.com/ch459742906/p/7119222.html
Copyright © 2011-2022 走看看