MYSQL Error: 1089 - Incorrect sub part key; the used key part isn't a string...

MYSQL版本:5.7.20

Error: 1089 - Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys

谷歌翻译:错误:1089 - 不正确的子部分关键; 使用的关键部分不是字符串,使用的长度比关键部分长,或者存储引擎不允许。

也就是说,错误的主要原因来源有三个。

1 - 使用的关键部分不是字符串

可能试图在不是字符串的列上创建索引前缀。例如,如果索引前缀所基于的列是非字符串(即INT,TIMESTAMP等),则会收到此错误:

MYSQL Error: 1089 - Incorrect sub part key; the used key part isn't a string..._第1张图片

"INDEX Col(id(5))"添加普通索引到test表,并尝试基于列Col的前5个字节创建索引前缀,但列Col是INT。不能存在这种操作。

2 - 使用的长度比关键部分长

当你尝试创建索引前缀比您正在建立索引的实际列更长时,会出现这种情况。示例:

MYSQL Error: 1089 - Incorrect sub part key; the used key part isn't a string..._第2张图片

"INDEX SingleIdx(name(100))"语句添加普通索引SigleIdx,并尝试基于name列的前100个字节创建索引前缀。由于name只有10个字符宽,所以会产生错误。

现在尝试小于10个字节创建索引:

MYSQL Error: 1089 - Incorrect sub part key; the used key part isn't a string..._第3张图片

创建成功。

3 - 存储引擎不支持。

这表明你正在尝试在存储引擎不允许使用的表上创建索引前缀。例如,在4.0.14之前,有限制阻止InnoDB表具有列前缀的索引。

最简单的解决方案就是改变存储引擎。

以上就是ERROR 1089的较详细阐述,希望对你有帮助。


参考:http://www.mysqlab.net/knowledge/kb/detail/topic/error%20messages/id/6576


你可能感兴趣的:(Mysql)