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)

本文地址:https://blog.csdn.net/qq_35847021/article/details/110691774

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐