向包含 VARCHAR 数据类型列的 MySQL 表添加唯一键约束时,可能会遇到以下错误:
#1071 - Specified key was too long; max key length is 767 bytes
即使 VARCHAR 列的组合长度看起来小于最大值,也会发生此错误键长度,在 MySQL 5.6 及之前版本中为 767 字节。
MySQL 5.6 及以下版本中 InnoDB 表的规定前缀限制为 767 字节。这意味着键列前缀的组合长度不能超过此限制。对于MyISAM表,最大键长度为1,000字节。
在提供的示例中,列column1和column2分别具有VARCHAR(20)和VARCHAR(500)数据类型。这意味着总长度为 522 字节,在 767 字节限制以下留有足够的余量。然而,错误消息表明情况并非如此。
错误的原因是MySQL对VARCHAR列使用了可变长度的多字节编码。这意味着 VARCHAR 列中的每个字符都可以由不同数量的字节表示。例如,VARCHAR(20) 列最多可以容纳 20 个字符,但如果采用 UTF-8mb4 等宽字符格式编码,每个字符最多可以占用 3 个字节。
结果,key的实际长度由每列可以存储的字符串的最大可能长度决定。在这种情况下,column1和column2中的字符串的最大可能长度分别为20 3字节= 60字节和500 3字节= 1500字节。总共有 60 1500 = 1560 字节,超过了最大密钥长度 767 字节。
要解决此问题,您可以考虑以下解决方案:
以上是为什么我在创建唯一密钥时收到 MySQL 错误 #1071:超过最大密钥长度?的详细内容。更多信息请关注PHP中文网其他相关文章!