• 首页 > 
  • 在DMS中使用MySQL建立索引时出现“Specified key was too long”报错

在DMS中使用MySQL建立索引时出现“Specified key was too long”报错

KB: 211557

 · 

更新时间:2021-04-12 15:12

问题描述

在DMS中使用以InnoDB为引擎的MySQL建立索引时,出现类似以下报错。

Specified key was too long; max key length is 767 bytes

问题原因

以MySQL的varchar、char等字符串类型字段作为索引时,单个索引字段存储长度超过了767字节。

解决方法

确定字符集类型的最大单个索引字段存储长度

以InnoDB为引擎的MySQL建立索引时,单个最大索引字段存储长度为767。不同字符集的最大单个索引字段存储长度不同。因此,需要根据不同字符集修改对应字符串类型字段的前缀索引长度。以下是不同字符集定义前缀索引长度的方法。

UTF-8MB4

按照表为UTF-8MB4字符集的标准,单个字符需要4个字节进行存储,则最大定义索引前缀需设置为191,具体计算方法如下。则类似a varchar(500)字段建立索引时需要定义前缀索引为a(191)。

767/4=191

UTF-8

按照表为UTF-8字符集的标准,单个字符需要3个字节进行存储,则最大定义索引前缀需设置为255,具体计算方法如下。则类似a varchar(500)字段建立索引时需要定义前缀索引为a(255)。

767/3=255

GBK

按照表为GBK字符集的标准,单个字符需要2个字节进行存储,则最大定义索引前缀需设置为383,具体计算方法如下。则类似a varchar(500)字段建立索引时需要定义前缀索引为a(383)。

767/2=383

修改前缀索引

  1. 登录DMS控制台
  2. 在左侧的导航栏中单击目标实例后,右键单击目标数据库,然后单击查询
  3. 在右侧界面中,右键单击目标表,然后单击编辑表结构
  4. 单击索引信息,在目标索引名右侧对应的包含列中,单击编辑
  5. 根据字符集类型设置成合适的前缀长度。

更多信息

适用于

  • 数据管理DMS