MySQL 创建索引报错
创建索引报错
添加索引发现报错,具体报错如下:
create unique index sm_sample_clothing_skc_SkcUniqueKey_uindex on sm_sample_clothing_skc (SkcUniqueKey)
报错信息: 1071 - Specified key was too long; max key length is 767 bytes
可以通过修改参数 innodb_large_prefix=on 避免报错
原因:由于MySQL的InnoDB引擎表索引字段长度的限制为767字节,因此对于多字节字符集的大字段或者多字段组合,创建索引时会出现该问题;以utf8mb4字符集字符串类型字段为例。utf8mb4是4字节字符集,默认支持的索引字段最大长度是191字符(767字节/4字节每字符≈191字符),因此在varchar(255)或char(255)类型字段上创建索引会失败。
修改后有可能直接成功,还有可能报如下错误:
报错信息:1709 - Index column size too large. The maximum column size is 767 bytes.
show table status like 'a'\G
alter table <表名> row_format=dynamic;
alter table <表名> row_format=compressed;
该报错表示还是不可以,那有可能就是 row_format 问题。Innodb表的行记录格式是 Dynamic 或 Compressed 的前提下修改参数才会有效,而 mysql 5.6 默认 row format 是 compact 模式。mysql 5.7 开始 row format 是默认模式修改为 Dynamic,所以 mysql 5.7 一般都可以,但 5.6 有可能不行。