更新时间:2025-04-09 gmt 08:00
索引长度限制导致修改varchar长度失败-j9九游会登录
场景描述
执行alter table修改表结构失败,报错如下:
specified key was too long; max key length is 3072 bytes

原因分析
- 在“innodb_large_prefix”设置为off的情况下,innodb表的单字段索引的最大字段长度不能超过767字节,联合索引的每个字段的长度不能超过767字节,且所有字段长度合计不能超过3072字节。
- 当“innodb_large_prefix”设置为on时,单字段索引最大长度可为3072字节,联合索引合计最大长度可为3072字节。
- 索引长度与字符集相关。使用utf8字符集时,一个字符占用三个字节,在“innodb_large_prefix”参数设置为on情况下,索引的所有字段的长度合计最大为1072个字符。
查看表结构如下:
create table `xxxxx` ( …… `subscription_type` varchar(64) not null default 'device_exception' comment '订阅类型', `auth_key` varchar(255) default '' comment '签名,接口请求头会根据这个值增加token', `create_time` timestamp not null default current_timestamp comment '创建时间', `update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间', primary key (`id`) using btree, unique key `enterprise_id` (`subscription_type`,`enterprise_id`,`callback_url`) using btree) ) engine=innodb auto_increment=1039 default charset=utf8 row_format=dynamic
该表使用了utf8字符集,一个字符占用三个字节。联合索引“enterprise_id”包含了“callback_url”字段,如果执行ddl操作将“callback_url”修改为varchar(1024),会超出联合索引最大长度限制,所以报错。
j9九游会登录的解决方案
mysql机制约束,建议修改索引或字段长度。
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨