建索引时或执行sql文件报 Specified key was too long; max key length is 767 bytes 错误的处理

原因

由于 MySQL Innodb 引擎表索引字段长度的限制为 767 字节,因此对于多字节字符集的大字段(或者多字段组合索引),创建索引会出现上面的错误。

以 utf8mb4 字符集 字符串类型字段为例:utf8mb4 是 4 字节字符集,则默认支持的索引字段最大长度是: 767 字节 / 4 字节每字符 = 191 字符,因此在 varchar(255) 或 char(255) 类型字段上创建索引会失败。

解决步骤

1.查看innodb_large_prefix,innodb_file_format参数

show variables like 'innodb_large_prefix';

show variables like 'innodb_file_format';

2.修改innodb_large_prefix,innodb_file_format参数

set global innodb_large_prefix=ON;

set global innodb_file_format=BARRACUDA;

set global innodb_file_format_max=BARRACUDA;

3.如果是新建表的情况下,需要在建表语句加上ROW_FORMAT=DYNAMIC

create table idx_length_test_02

(

id int auto_increment primary key,

name varchar(255)

)

ROW_FORMAT=DYNAMIC default charset utf8mb4;

如果是表存在的情况下

对已经创建的表,通过下面的语句修改下表的 row_format 格式

alter table <table_name> row_format=dynamic;

alter table <table_name> row_format=compressed;

参考:https://www.lastupdate.net/3180.html

          https://www.wulaoer.org/?p=1402


版权声明:本文为qq_36173200原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。