当我执行以下命令时:
ALTER TABLE `mytable` ADD UNIQUE (
`column1` ,
`column2`
);
我收到了这个错误信息:
# 1071 - Specified key was too long; max key length is 767 bytes
关于第1列和第2列的信息:
column1 varchar(20) utf8_general_ci
column2 varchar(500) utf8_general_ci
我想 varchar(20)
只需要21字节 varchar(500)
只需要501字节。所以总字节数是522,小于767。为什么我会收到错误信息?
# 1071 - Specified key was too long; max key length is 767 bytes
18条答案
按热度按时间slsn1g2916#
您可以添加一列md5的长列
aoyhnmkz17#
当你到达极限时。设置以下选项。
innodb公司
utf8
VARCHAR(255)
innodb公司utf8mb4
VARCHAR(191)
wfypjpf418#
767字节是MySQL5.6版(及以前版本)中innodb表的前缀限制。myisam表有1000字节长。在MySQL5.7及更高版本中,此限制已增加到3072字节。
您还必须注意,如果在utf8mb4编码的大char或varchar字段上设置索引,则必须将767字节(或3072字节)的最大索引前缀长度除以4,得到191。这是因为utf8mb4字符的最大长度是四个字节。对于utf8字符,它将是三个字节,导致最大索引前缀长度为254。
一种选择是只对varchar字段设置下限。
另一种选择(根据对此问题的答复)是获取列的子集,而不是整个金额,即:
根据需要进行调整,以获得要应用的密钥,但我想知道是否值得检查有关此实体的数据模型,以查看是否有改进可以让您在不触及mysql限制的情况下实现预期的业务规则。