首页 >数据库 >mysql教程 >MySQL 错误 #1071:如何解决'指定键太长;最大键长度为 767 字节”?

MySQL 错误 #1071:如何解决'指定键太长;最大键长度为 767 字节”?

Linda Hamilton
Linda Hamilton原创
2024-12-13 19:41:19193浏览

MySQL Error #1071: How to Resolve

MySQL 错误 #1071:了解密钥长度约束

尝试为数据库表创建唯一密钥时,遇到以下错误:

#1071 - Specified key was too long; max key length is 767 bytes

错误信息表明指定的key超过了允许的最大长度InnoDB 表,767 字节。这种行为在早期版本的 MySQL 中很常见,例如 5.6 及更早版本。

VARCHAR 列的字节计算

您有 VARCHAR(20) 类型的列 column1列 2 的类型为 VARCHAR(500)。最初,您可能假设密钥需要 21 501 = 522 字节,小于 767。但是,这种假设是不正确的。

了解前缀长度限制

MySQL 文档指出键的最大前缀长度为 767 字节。此长度限制适用于键中包含的列的组合长度。在这种情况下,总密钥长度为 21 500 = 521 字节,小于 767。

但是,需要注意的是,前缀长度限制实际上取决于列使用的字符编码。对于 VARCHAR(20) 等非 Unicode 列,每个字符需要一个字节。但是,对于 Unicode 列,例如 VARCHAR(500) utf8_general_ci,每个字符可能需要多个字节。

Unicode 列的字节计算

在这种情况下,column2 是Unicode 列。 utf8_general_ci 字符集每个字符最多使用 3 个字节。因此,Unicode 列的实际键长度是通过将字符长度乘以每个字符的字节数来计算的:

20 bytes (column1) + (500 bytes * 3 bytes per character) = 1501 bytes

解决方案:缩短键前缀

由于密钥长度超过最大限制,可以通过缩短密钥前缀来解决错误。这可以通过限制为第 2 列索引的字符数来实现。例如:

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

此调整将密钥总长度减少到 21 (200 * 3) = 621 字节,现在符合 767 字节前缀长度限制。

以上是MySQL 错误 #1071:如何解决'指定键太长;最大键长度为 767 字节”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn