MySQL 索引长度太长报错1071

今天生产导入MySQL表遇到如下问题:
MySQL 索引长度太长报错1071_第1张图片报错原因:
1.innodb存储引擎,多列索引的长度限制如下:
每个列的长度不能大于767 bytes;所有组成索引列的长度和不能大于3072 bytes

2 myisam存储引擎,多列索引长度限制如下:
每个列的长度不能大于1000 bytes,所有组成索引列的长度和不能大于1000 bytes

解决办法:
可以启用启用innodb_large_prefix参数,来使得单个索引字段的长度突破767

注意:

①启用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 索引长度太长报错1071_第2张图片
最终解决办法:

show variables like ‘innodb_large_prefix’;

show variables like ‘innodb_file_format’;

set global innodb_large_prefix=1;

set global innodb_file_format = BARRACUDA;

你可能感兴趣的