当前位置:网站首页>MySQL故障案例 | ERROR 1071 (42000): Specified key was too long

MySQL故障案例 | ERROR 1071 (42000): Specified key was too long

2022-06-23 08:43:00 凡人学运维

MySQL 建表出现如下错误 (5.7)

ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

查看官网内容得知:

If innodb_large_prefix is enabled (the default), the index key prefix limit is 3072 bytes for InnoDB tables that use the DYNAMIC or COMPRESSED row format. If innodb_large_prefix is disabled, the index key prefix limit is 767 bytes for tables of any row format.

https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html

默认情况下单个列的索引不能超过767位,我们可以启用 innodb_large_prefix=on 选项,将约束项扩展至 3072 byte。

# 1、在线开启
set global innodb_large_prefix = 1;

# 2、确认开启
show variables like 'innodb_large_prefix';

# 3、配置文件配置开启
innodb_large_prefix=on

另外,如果添加索引的字段长度过长,可以改为添加前缀索引的方式,如下

# 单列
alter table t1 add index idx_c1(c1(10));
 
# 多列
alter table t1 add index idx_c1_c2(c1(10),c2(10)); 

注意,添加前缀索引的长度并不是越长越好,这里涉及到一个选择性问题,

select 
    count(distinct 列名)/count(*)as a,
    COUNT(DISTINCT left(列名,100)) as b, 
    COUNT(DISTINCT left(列名,110)) as c 
from 表名;

END

原网站

版权声明
本文为[凡人学运维]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/2028270