mysql_问题记录(自己遇到的问题记录)
程序员文章站
2022-07-03 20:10:42
创建数据库表的时候遇到[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 bytesSpecified 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
[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)
本文地址:https://blog.csdn.net/qq_35847021/article/details/110691774