我是靠谱客的博主 舒服哑铃,最近开发中收集的这篇文章主要介绍mysql_问题记录(自己遇到的问题记录),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

创建数据库表的时候遇到 

[2020-12-05 15:30:52] [42000][1071] Specified key was too long; max key length is 767 bytes
[2020-12-05 15:30:52] [42000][1071] Specified key was too long; max key length is 767 bytes

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

查阅资料发现造成此问题出现的原因在于

    数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引

    mysql的varchar主键只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的。

对于存储引擎不同对限制的长度也不同

innodb存储引擎,多列索引的长度限制如下:

  每个列的长度不能大于767 bytes;所有组成索引列的长度和不能大于3072 bytes

       InnoDB中,可以启用启用innodb_large_prefix参数,来使得单个索引字段的长度突破767

myisam存储引擎,多列索引长度限制如下:

  每个列的长度不能大于1000 bytes,所有组成索引列的长度和不能大于1000 bytes

解决办法

启用innodb_large_prefix参数能够取消对于索引中每列长度的限制(但是无法取消对于索引总长度的限制)

启用innodb_large_prefix必须同时指定innodb_file_format=barracuda,innodb_file_per_table=true,并且建表的时候指定表的row_format为dynamic或者compressed(mysql 5.6中row_format默认值为compact)

最后

以上就是舒服哑铃为你收集整理的mysql_问题记录(自己遇到的问题记录)的全部内容,希望文章能够帮你解决mysql_问题记录(自己遇到的问题记录)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部