在数据管理DMS中执行SQL语句时报“Incorrect prefix key; the used key part isn't a string, the used length is longer than...”的错误

更新时间:

问题描述

通过数据管理DMS对使用InnoDB引擎的MySQL实例创建或变更前缀索引(Index Prefixes)时,系统提示以下错误。

Incorrect prefix 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

问题原因

创建或变更前缀索引时系统提示上述错误的原因如下:

  • 原因一
    目标字段不是VARCHAR(字符)类型。前缀索引仅支持VARCHAR类型的字段。如果目标字段是INT(整数)、TIME(时间)等非VARCHAR类型的字段,则会出现此报错。
  • 原因二
    定义的前缀索引长度超过字段本身的长度。例如,定义字段column_a的长度为128字符,即column_a  varchar(128),设置前缀索引时的长度为130字符,即key idx_a(column_a(130)),则报错产生。需要确保前缀索引的长度小于字段本身的长度。
    说明:更多有关VARCHAR类型长度的介绍,请参见更多信息

解决方案

请检查您创建或变更前缀索引的SQL语句,确保目标字段符合以下要求:

  • 目标字段为VARCHAR类型。
  • 前缀索引长度小于字段本身的长度。

如果您不确定目标字段的类型或本身的长度,可以通过desc等SQL语句进行查询。

更多信息

VARCHAR类型字段所能存放的汉字、数字或字母与MySQL版本有关,具体如下:

  • MySQL5.0以下的版本
    varchar(X)中X的单位是字节。例如varchar(100),指的是100个字节,如果存放UTF8汉字,只能存放33个汉字,因为UTF8编码中,每个汉字占用3个字节。
  • MySQL5.0及以上的版本
    varchar(X)中X的单位是字符。例如varchar(100),指的是100个字符,无论存放的是汉字、数字或字母,都可以存放100个。

相关文档

如果您想了解更多有关前缀索引的信息,请参见MySQL官方介绍文档

适用于

  • 数据管理DMS