问题现象
在RDS MySQL中,当尝试在大字段上创建索引时,可能会遇到以下错误:
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
可能原因
MySQL的InnoDB引擎对索引字段长度的限制为767字节。对于多字节字符集的大字段或多字段组合,创建索引时会超出此限制就会引发报错。
说明
以utf8mb4
字符集为例,它是4字节字符集,默认支持的索引字段最大长度为191字符(767字节/每字符4字节≈191字符)。因此,在varchar(255)
或char(255)
类型字段上创建索引会失败。更多详情,请参见MySQL官网文档。
解决方案
登录RDS控制台,在参数设置页面修改参数
innodb_large_prefix
为ON
,并单击提交参数。说明启用
innodb_large_prefix
后,对于Dynamic
和Compressed
格式的InnoDB引擎表,最大索引字段长度可支持到3072字节。在主实例中修改该参数后,系统将自动同步到该主实例下的所有只读实例中。
调整表的row_format。
创建新表时,指定表的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;
对于已创建的表,可通过以下命令修改row_format:
ALTER TABLE <表名> ROW_FORMAT=DYNAMIC; ALTER TABLE <表名> ROW_FORMAT=COMPRESSED;
完成上述操作后,请重新尝试创建索引,并检查是否仍出现错误。
该文章对您有帮助吗?