开发者社区 问答 正文

技术运维问题 - MYSQL使用 -RDS MySQL 建索引时 Specified key was too long; max key length


1. 错误原因
2. 解决步骤



在大字段上创建索引时,有时会碰到下面的错误

ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
[url=https://img.alicdn.com/tfscom/TB1cboSLVXXXXb7XXXXXXXXXXXX.png][/url]
Step 3. 修改现有表
对已经创建的表,通过下面的语句修改下表的 row_format 格式

alter table <table_name> row_format=dynamic; alter table <table_name> row_format=compressed;

展开
收起
梨好橙 2018-09-24 22:07:28 2129 分享 版权
阿里云 AI 助理回答
  1. 错误原因: 当您在RDS MySQL的大字段上尝试创建索引时遇到错误ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.,这是由于MySQL的InnoDB存储引擎对索引列的长度限制为767字节。特别是在使用多字节字符集(例如utf8mb4)时,每个字符占用更多的字节,导致能够用于索引的字符数量减少。例如,对于varchar(255)char(255)类型且使用utf8mb4字符集的字段,最大支持的索引长度约为191个字符(因为767字节除以每字符4字节约等于191)。

  2. 解决步骤:

    • 修改innodb_large_prefix参数:

      1. 登录阿里云RDS MySQL控制台。
      2. 导航至目标实例的“参数设置”页面。
      3. innodb_large_prefix参数值设置为ON1,然后点击“提交参数”。这允许更大的索引列长度,最多可达3072字节对于Dynamic和Compressed行格式的表。
    • 指定或调整表的row_format:

      1. 新建表时,在CREATE TABLE语句中指定ROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED,例如:
      CREATE TABLE idx_length_test (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(255)
      ) ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4;
      
      1. 已存在表的调整,使用ALTER TABLE命令更改行格式:
      ALTER TABLE 表名 ROW_FORMAT=DYNAMIC;
      ALTER TABLE 表名 ROW_FORMAT=COMPRESSED;
      

      其中“表名”需要替换为您实际的表名。

通过上述步骤,可以有效解决在大字段上创建索引时因索引列尺寸过大导致的错误问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答