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

mysql错误:指定的密钥太长;最大密钥长度为767字节,mysql,alter,Mysql,Alter,我必须运行这个命令来更改我的一个表中的一列 ALTER table XYZ修改值VARCHAR(1024) 当我运行它时,我得到了这个错误 第1行出现错误1071(42000):指定的键太长;最大密钥长度为767字节 原始列大小为250。这是奇怪的部分。我有一个配置相同的第二台MySQL服务器,它正在与第一台服务器进行双向复制。当我在我的第二台MySQL服务器上运行这个“ALTERTABLE”命令时,我没有得到这个错误。事实上,在alter命令完成运行后,该命令被复制到我的主mysql服务器上,

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

ALTER table XYZ修改值VARCHAR(1024)

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

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

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

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

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


谢谢../Ken

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

DROP INDEX index_name ON tbl_name;
CREATE INDEX index_name ON tbl_name (col1,col2(100));
其中col2是示例中的值列,100是索引中包含的最大字符数

如果不确定表上的索引,请尝试以下操作(用表名替换tbl_名称)


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

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

尝试将值长度更改为255

这可能有用

下面的链接可能会引导您找到相同的链接


服务器上有两个不同版本的mysql,因此您得到了这个
SHOW INDEXES IN tbl_name;