在创建要给表的时候遇到一个有意思的问题,提示Specified key was too long; max key length is 767 bytes,从描述上来看,是Key太长,超过了指定的 767字节限制
下面是产生问题的表结构
CREATE TABLE test_table
(
id
int(11) unsigned NOT NULL AUTO_INCREMENT,
name
varchar(1000) NOT NULL DEFAULT ‘’,
link
varchar(1000) NOT NULL DEFAULT ‘’,
PRIMARY KEY (id
),
KEY name
(name
)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
复制代码
我们可以看到,对于name,我们设置长度为1000可变字符,因为采用utf8mb4编码, 所以它的大小就变成了 1000 * 4 > 767
所以再不修改其他配置的前提下,varchar的长度大小应该是 767 / 4 = 191
有兴趣的同学可以测试下,分别指定name大小为191, 192时,是不是前面的可以创建表成功,后面的创建表失败,并提示错误Specified key was too long; max key length is 767 bytes
解决办法一
使用innodb引擎
启用innodb_large_prefix选项,修改约束扩展至3072字节
重新创建数据库
my.cnf配置
se