• 首页 > 
  • MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes”

MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes”

KB: 206204

 · 

更新时间:2021-05-06 10:01

问题描述

云数据库RDS MySQL版中创建索引时,提示以下报错:

  • Specified key was too long; max key length is 767 bytes
  • ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

解决方案

对于DYNAMIC和COMPRESSED格式的InnoDB表,您需要开启innodb_large_prefix选项,即将innodb_large_prefix值修改为ON,启用innodb_large_prefix选项可以允许超过767字节(最多3072字节)的索引键前缀。

说明

  • MySQL 5.6/5.7支持修改innodb_large_prefix选项,但是自建MySQL 5.6数据库不支持。
  • 只支持DYNAMIC和COMPRESSED格式的表,compact格式的表不支持。
  1. 登录RDS控制台,选择目标地域,单击目标实例ID,单击参数设置,将innodb_large_prefix值修改为ON,然后单击提交参数即可。
  2. 登录数据库,执行以下SQL语句,确认innodb_large_prefix值为ON。
    show variables like 'innodb_large_prefix';
    系统显示类似如下。
  3. 执行以下SQL语句,查看表结构。
    show create table [$Table_Name];
    说明:[$Table_Name]为表名。
    系统显示类似如下,确认需要创建索引的字段类型长度超过767字节,表结构信息为举例说明,请以实际环境为准进行确认。
  4. 执行以下SQL语句,确认Row_format值不是DYNAMIC和COMPRESSED。
    show table status like '[$Table_Name]'\G
    系统显示类似如下。
  5. 执行以下SQL语句,将Row_format值修改为dynamic。
    alter table [$Table_Name] Row_format=dynamic;
  6. 重新创建索引即可。

适用于

  • 云数据库RDS MySQL版