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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有