mysql列超长处理

jimmy 2019年04月29日 561次浏览

Mysql The maximum column size is 767 bytes错误处理

RDS for MySQL在大字段上创建索引时,有时会遇到以下错误:

ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes

原因

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

如果是utf8mb4字符集,由于utf8mb4是4字节字符集,则默认支持的索引字段最大长度是191字符(767字节/4字节每字符≈191字符),因此在varchar(255)或char(255)类型字段上创建索引会失败。

如果是utf8字符集,由于utf8是3字节字符集,则默认支持的索引字段最大长度是255字符(767字节/3字节每字符≈255字符),则varchar(255)或char(255)不会失败。

处理

如果是使用阿里云的RDS需要在控制台的参数设置里修改参数innodb_large_prefix为ON,然后单击提交参数。

请输入图片描述

创建表的时候指定表的row format格式为Dynamic或者Compressed,示例如下:

create table idx_length_test_xxxx
(
  id int auto_increment primary key,
  stringname varchar(255)
) 
ROW_FORMAT=DYNAMIC default charset utf8mb4;

对已经创建的表,修改表的row_format格式命令如下:

alter table <表名> row_format=dynamic;
alter table <表名> row_format=compressed;