#1071-指定的密钥太长;最大密钥长度为767字节

wwodge7n  于 2021-06-19  发布在  Mysql
关注(0)|答案(18)|浏览(594)

当我执行以下命令时:

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
slsn1g29

slsn1g2916#

您可以添加一列md5的长列

aoyhnmkz

aoyhnmkz17#

当你到达极限时。设置以下选项。
innodb公司
utf8 VARCHAR(255) innodb公司
utf8mb4 VARCHAR(191)

wfypjpf4

wfypjpf418#

767字节是MySQL5.6版(及以前版本)中innodb表的前缀限制。myisam表有1000字节长。在MySQL5.7及更高版本中,此限制已增加到3072字节。
您还必须注意,如果在utf8mb4编码的大char或varchar字段上设置索引,则必须将767字节(或3072字节)的最大索引前缀长度除以4,得到191。这是因为utf8mb4字符的最大长度是四个字节。对于utf8字符,它将是三个字节,导致最大索引前缀长度为254。
一种选择是只对varchar字段设置下限。
另一种选择(根据对此问题的答复)是获取列的子集,而不是整个金额,即:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

根据需要进行调整,以获得要应用的密钥,但我想知道是否值得检查有关此实体的数据模型,以查看是否有改进可以让您在不触及mysql限制的情况下实现预期的业务规则。

相关问题