mysql错误:指定密钥太长;最大密钥长度为767字节

时间:2014-06-26 17:00:57

标签: mysql alter

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

ALTER表XYZ修改值VARCHAR(1024);

当我运行它时,我收到此错误。

错误1071(42000)第1行:指定密钥太长;最大密钥长度为767字节

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

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

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

感谢../肯

2 个答案:

答案 0 :(得分:3)

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

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;

答案 1 :(得分:0)

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

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

尝试将值长度更改为255。

它可能有用。

以下链接可能会引导您进行相同的操作。

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