Ошибка MySQL кажется нефиксированной: слишком большой размер столбца индекса - PullRequest
1 голос
/ 15 апреля 2019

Я получаю: ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.

Здесь много вопросов по этому поводу, я попробовал многие из них.Мой контекст:

  • MySQL 8.0 на Amazon RDS
  • Одна конкретная таблица имеет varchar (255) на кодировке utf8mb4_unicode_ci
  • Эта таблица установлена ​​в ROW_FORMAT Compact

Я уже знаю проблему.Этот столбец использует 4 * 255 байт, но таблица COMPACT может содержать только 767.

То, что я уже пробовал (ни один из них не работает):

  • изменить таблицу, чтобы изменить столбец на varchar (100)
  • удалить определенный индекс
  • удалить весь столбец
  • изменить ROW_FORMAT на DYNAMIC или COMPRESSED

Я также пытался восстановить мой самый старыйСнимок RDS (7 дней), и он не работает.Это очень странно, так как приложение работало вчера и в предыдущие дни.

Любая помощь?


Редактировать:

ПОКАЗАТЬ ПОЛНЫЕ КОЛОННЫ дает мне это за оскорблениеколонка:

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

, и ПОКАЗАТЬ ИНДЕКС дает мне это:

*************************** 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 голосов
/ 14 мая 2019

Возможно, вам нужно перейти на 8.0.12: Из журнала изменений:

----- 2018-07-27 8.0.12 Общая доступность и 2018-07-27 5.7.23 Общая доступность -- - -----

При попытках увеличить длину столбца VARCHAR таблицы InnoDB с использованием ALTER TABLE с алгоритмом INPLACE попытка не удалась, если столбец был проиндексирован.

Если размер индекса превысил предел InnoDB в 767 байт для формата строки COMPACT или REDUNDANT, CREATE TABLE и ALTER TABLE не сообщали об ошибке (в строгомРежим SQL) или предупреждение (в нестрогом режиме).(Ошибка # 26848813)

...