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

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

当我执行以下命令时:

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


繁花如伊
浏览 816回答 3
3回答

喵喔喔

767字节是规定前缀限制对于MySQL版本5.6中的InnoDB表(和以前的版本)。MyISAM表的长度为1,000字节。在MySQL版本5.7及以上中,这个限制已经增加到3072字节。您还必须注意,如果您在一个大char或varchar字段上设置了一个索引,该字段是utf8mb4编码的,则必须将最大索引前缀长度767字节(或3072字节)除以4,导致191字节。这是因为utf8mb4字符的最大长度是4个字节。对于UTF 8字符,它将是三个字节,导致最大索引前缀长度为254。您可以选择只对VARCHAR字段设置下限。另一个选项(根据对这一问题的回应)是获取列的子集,而不是整笔金额,即:ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );虽然您需要获得应用的关键,但我不知道是否值得检查有关该实体的数据模型,看看是否有改进可以让您实现预期的业务规则,而不会达到MySQL的限制。

眼眸繁星

如果有人对INNODB/utf-8尝试将UNIQUE索引VARCHAR(256)字段,切换到VARCHAR(255)..似乎255是限制。

拉莫斯之舞

当你达到极限的时候。设置如下。INNODButf8 VARCHAR(255)INNODButf8mb4 VARCHAR(191)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL