MySQL错误似乎无法修复:索引列大小太大

时间:2019-04-15 03:16:39

标签: mysql innodb mysql-8.0

我得到:ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

这里有很多问题,我尝试了很多。我的情况:

  • Amazon RDS上的MySQL 8.0
  • 一个特定的表在utf8mb4_unicode_ci字符集上具有varchar(255)
  • 该表设置为ROW_FORMAT Compact

我已经知道问题了。该列使用4 * 255字节,但COMPACT表只能容纳767。

我已经尝试过的方法(均无效):

  • 更改表以将列更改为varchar(100)
  • 删除特定索引
  • 删除整列
  • 将ROW_FORMAT更改为DYNAMIC或COMPRESSED

我还尝试还原了最旧的RDS快照(7天),但是它不起作用。这很奇怪,因为该应用程序昨天和前几天都在工作。

有帮助吗?


编辑:

SHOW FULL COLUMNS在令人讨厌的专栏上给了我

     Field: reasonForNetPromoteScore
      Type: varchar(255)
 Collation: utf8mb4_unicode_ci
      Null: YES
       Key: MUL
   Default: NULL
     Extra: 
Privileges: select,insert,update,references
   Comment: 

SHOW INDEX给了我这些:

*************************** 6. row ***************************
        Table: Registration
   Non_unique: 1
     Key_name: registration_reason_net_promote_score
 Seq_in_index: 1
  Column_name: reasonForNetPromoteScore
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment: 
Index_comment: 
      Visible: YES
   Expression: NULL
*************************** 7. row ***************************
        Table: Registration
   Non_unique: 1
     Key_name: registration_reason_net_promote_score_nps
 Seq_in_index: 1
  Column_name: reasonForNetPromoteScore
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment: 
Index_comment: 
      Visible: YES
   Expression: NULL

1 个答案:

答案 0 :(得分:0)

也许您需要升级到8.0.12:从变更日志中:

----- 2018-07-27 8.0.12常规可用性&2018-07-27 5.7.23常规可用性-------

对于尝试使用ALTER TABLE和INPLACE算法来增加InnoDB表的VARCHAR列的长度的尝试,如果对该列进行了索引,则尝试将失败。

如果对于COMPACT或REDUNDANT行格式,索引大小超过了InnoDB的767字节限制,则CREATE TABLEALTER TABLE不会报告错误(在严格SQL模式下)或警告(在非严格模式下) )。 (错误#26848813)