问题:
运行ddl创建表时报错, Specified key was too long; max key length is 767 bytes

原因:
msyql5.6及以前版本, 默认单列索引最大长度767bytes,若使用utf8mb4格式编码(utf8字符占用3字节,utf8mb4字符占用4字节), 则单个字段长度不能超过191, 5.7及之后版本, 限制放开到3072 bytes。

PS: 由于mysql的utf8编码并不是真正UTF-8,详细介绍请自行百度google,推荐使用utf8mb4,这个是通常所说的UTF-8。而utf8mb4的字符占用4字节,所以相较于utf8的占用3字节,更容易出现上面这种索引长度超限的问题。

在5.6及之前版本,若有索引超限的情况,可使用如下方法:
查看配置:

show variables like ‘innodb_large_prefix’;
show variables like ‘innodb_file_format’;

修改为如下配置:

set global innodb_large_prefix=ON;
set global innodb_file_format=BARRACUDA;

innodb_large_prefix=ON使得索引从767字节扩充到3072字节.注意这是单个(单列)索引的最大限制

建表时需要指定ROW_FORMAT为dynamic或compressed

使用如下命令修改:

ALTER TABLE yourTableName ROW_FORMAT=DYNAMIC;


作者 申佳明

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code