当前位置:   article > 正文

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

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

来几个知识点

  • 一个字符latin1占用1 bytesutf8占用3 bytes,而utf8mb4占用4 bytes
  • mysql5.6以及以前的版本的InnoDB引擎的表限制索引最多占用767 bytes;而MyISAM的是最长1000 bytes
  • mysql5.7版本开始这个限制提升到3072 bytesUTF8可以达到VARCHAR(1024)

所以当你的唯一索引字段在mysql5.6或更早的版本时(引擎为InnoDB),utf8mb4字符串最长能到VARCHAR(191)(1914=764),utf8可以到VARCHAR(255)(255·3=765)。如果你从不指定长度直接使用utf8mb4字段做唯一索引,就会报Specified key was too long; max key length is 767 bytes错误,因为计算默认字符串默认长度时是255。

这个问题在Laravel中就有可能发生,为了存储emoji它默认使用utf8mb4,如果你的mysql版本低于5.7,需要注意上面的情况.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/606182
推荐阅读
相关标签
  

闽ICP备14008679号