max key length is 767 bytes

/ 技术 / 1 条站内评论 / 427浏览

前言

原本表中orderNo字段长度50位,因为业务原因要扩充值255位。但是执行的过程中出现异常

Specified key was too long; max key length is 767 bytes

排查

InnoDB有单个索引最大字节数 768 的限制,而字段定义的是能存储的字符数,比如 VARCHAR(200) 代表能够存200个汉字,索引定义是字符集类型最大长度算的,

即 utf8 maxbytes=3, utf8mb4 maxbytes=4

算下来utf8和utf8mb4两种情况的索引长度分别为600 bytes和800bytes,后者超过了768,导致出错:Error 1071: Specified key was too long; max key length is 767 bytes

因此255*4=1020;超过了索引最大长度767字节;

解决

降低字段长度到767字节以内

767/4=191.75

因此字段长度小于191.75即可。

还有一种方式就是用前缀索引 先把之前的索引删了 然后再改表长度 再加前缀索引

参考

mysql使用utf8mb4经验吐血总结



  1. 好好学习,天天来逛

    回复
召唤蕾姆
琼ICP备18000156号

鄂公网安备 42011502000211号