我必须运行此命令来更改我的一个表中的列。
ALTER表XYZ修改值VARCHAR(1024);
当我运行它时,我收到此错误。
错误1071(42000)第1行:指定密钥太长;最大密钥长度为767字节
原始列大小为250.这是奇怪的部分。我有一个配置相同的第二个MySQL服务器,它正在与第一个服务器进行双向复制。当我在我的第二台MySQL服务器上运行这个“alter table”命令时,我没有收到此错误。实际上,在alter命令完成运行后,该命令被复制到我的主mysql服务器而没有任何错误。
我的两个mysql服务器被设置为主动 - 主动,但只有其中一个正在被主动使用。所以为了澄清,我在主动使用的服务器上得到了这个“最大密钥长度”错误。但它在没有使用的第二台服务器上运行良好。
有没有人知道为什么命令在我的第二台服务器上运行?
感谢../肯
答案 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/