首页 >数据库 >mysql教程 >为什么 MySQL 会抛出错误#1071:'指定的键太长”?

为什么 MySQL 会抛出错误#1071:'指定的键太长”?

Patricia Arquette
Patricia Arquette原创
2024-12-14 14:59:10539浏览

Why Does MySQL Throw Error #1071:

MySQL 错误 #1071:深入研究密钥长度约束

尝试通过在两个 VARCHAR 上添加唯一键约束来修改 MySQL 表时列时,会出现一条相当令人困惑的错误消息:“#1071 - 指定的密钥太长;最大密钥长度为767 字节”。尽管两列的大小似乎都在 767 字节限制之内,但了解此错误需要更深入地了解 MySQL 的密钥长度限制。

重新访问密钥长度限制

MySQL 5.6 及更早版本中键的最大长度对于 InnoDB 表来说确实是 767 字节,对于 InnoDB 表来说是 1,000 字节MyISAM 表。然而,在 MySQL 5.7 及更高版本中,此限制已扩展到更大的 3072 字节。

解码 VARCHAR 存储

虽然 VARCHAR 数据类型建议最大长度为各自的列存储 20 和 500 字节,此计算不考虑字符编码。如果您的 VARCHAR 字段以 utf8mb4 格式编码,则最大索引前缀长度实际上会减少四分之一,结果只有 191 个字节 (767 / 4)。

查找解决方法

要解决此问题,请考虑实施以下其中一项策略:

  • 减少列大小:限制 VARCHAR 字段的最大长度以满足索引前缀长度约束。
  • 对列进行子集化: 仅利用列的一部分进行索引,从而减少键长度。例如: ALTER TABLE mytable ADD UNIQUE (column1(15),column2(200));
  • 审查数据模型:重新评估您的表设计并考虑是否有替代方法可以避免遇到这个 MySQL 限制。

以上是为什么 MySQL 会抛出错误#1071:'指定的键太长”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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