阿里云RDS数据库MySQL提示Specified key was too long; max key length is 767 byte

发布时间:2020-12-14 16:39:48

客户问题:

阿里云RDS数据库MySQL在大字段上创建索引时,偶尔会遇到如下错误。

Error 1071: Specified key was too long; max key length is 767 bytes.?

凯铧互联技术回复:

问题原因

由于MySQL的InnoDB引擎表索引字段长度的限制为767字节,因此对于多字节字符集的大字段或者多字段组合,创建索引时会出现该问题。

说明:以utf8mb4字符集字符串类型字段为例。utf8mb4是4字节字符集,默认支持的索引字段最大长度是191字符(767字节/4字节每字符≈191字符),因此在varchar(255)或char(255)类型字段上创建索引会失败。详情请参见MySQL官网文档。

解决方案

1、在阿里云RDS数据库控制台的参数设置页面修改innodb_large_prefix参数值为ON或者1,然后单击提交参数。

阿里云RDS数据库max key length is 767 bytes

说明:将innodb_large_prefix参数值修改为ON或者1后,对于Dynamic和Compressed格式的InnoDB引擎表,其最大的索引字段长度支持到3072字节。

2、创建表时指定表的Row Format为Dynamic或Compressed,示例如下。

create table idx_length_test_02

(

  id int auto_increment primary key,

  name varchar(255)

ROW_FORMAT=DYNAMIC default charset utf8mb4;

3、对已经创建的表,修改表的Row Format的SQL语句如下所示。

alter table idx_length_test_02 row_format=dynamic;

alter table idx_length_test_02 row_format=compressed;

 
 

爆款产品阿里云低至0.73折
 阿里云合作伙伴营销页


如果以上回复对您的问题还未能解决,请联系凯铧互联售后技术支持。阿里云代理商凯铧互联提供阿里云服务器/企业邮箱等产品的咨询购买到实施,从迁云到护航的全周期专业服务,满足客户各场景下的服务需求,同样的品质,更多贴心的服务,更实惠的价格。阿里云代理商凯铧互联会为您提供一对一专业全面的技术服务,同时还能为您提供阿里云其他产品购买的专属折扣优惠。通过凯铧互联购买可以获得折上折优惠!若您需要帮助可以直接联系我方客服,阿里云代理商凯铧互联专业技术团队为您提供全面便捷专业的7x24技术服务。 电话专线:136-5130-9831,QQ:3398234753。

为什么选择凯铧互联购买阿里云产品:北京凯铧互联科技有限公司(简称凯铧互联)由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、腾讯服务器运维团队,团队90%的成员均是超过10年具备专业运维经验的精英。作为阿里云,腾讯云,百度云,金山云,华为云重要的合作伙伴,凯铧互联专注于为企业用户提供云计算及云服务器解决方案。公司总部设在北京,并在内蒙设有办事处,服务全国各地企业,与互联网专业公司及主流服务商建立了良好合作关系。