【问题标题】:mysql error: Specified key was too long; max key length is 767 bytesmysql错误:指定的键太长;最大密钥长度为 767 字节
【发布时间】:2014-08-17 15:32:23
【问题描述】:

我必须运行这个命令来改变我的一个表中的一列。

ALTER 表 XYZ 修改值 VARCHAR(1024);

当我运行它时,我得到了这个错误。

ERROR 1071 (42000) at line 1: 指定的键太长;最大密钥长度为 767 字节

原来的列大小是 250。这是奇怪的部分。我有一个具有相同配置的第二个 MySQL 服务器,它正在与第一个服务器进行 2 路复制。当我在我的第二台 MySQL 服务器上运行这个“alter table”命令时,我没有收到这个错误。事实上,alter 命令运行完成后,该命令被复制到我的主 mysql 服务器上,没有任何错误。

我的两台 mysql 服务器被设置为主动-主动,但只有一个正在被主动使用。所以澄清一下,我在活跃使用的服务器上收到了这个“最大密钥长度”错误。但它在第二台未被使用的服务器上运行良好。

有谁知道为什么命令在我的第二台服务器上运行 find ?

谢谢../肯

【问题讨论】:

标签: mysql alter


【解决方案1】:

您可能需要调整此表的索引。

DROP INDEX index_name ON tbl_name;
CREATE INDEX index_name ON tbl_name (col1,col2(100));

其中 col2 是示例中的值列,100 是要包含在索引中的最大字符数。

如果您不确定表上的索引,请尝试以下操作(将 tbl_name 替换为您的表名)。

SHOW INDEXES IN tbl_name;

【讨论】:

    【解决方案2】:

    当数据库的编码设置为 UTF8 时,我也遇到了同样的问题。

    如果您使用 latin1,那么您可以索引的最大列是 varchar(767),但如果您使用 utf8,那么限制是 varchar(255)。

    尝试将值长度更改为 255。

    它可能会起作用。

    以下链接可能会引导您到相同的地方。

    http://mechanics.flite.com/blog/2014/07/29/using-innodb-large-prefix-to-avoid-error-1071/

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2016-04-15
      • 2012-05-31
      • 2017-04-01
      • 2017-11-23
      • 2017-02-01
      • 2013-11-25
      • 2015-06-22
      • 1970-01-01
      相关资源
      最近更新 更多