1071: Указанный ключ слишком длинный; максимальная длина ключа — 767 байт
MySQLЧто это значит?
Создаваемый индекс (или ключ) превысил максимально допустимую длину в байтах. Особенно при многобайтовых наборах символов индексы по VARCHAR быстро достигают этого предела.
Почему возникает?
Индекс по широкому столбцу VARCHAR с utf8mb4 (4 байта на символ); старый формат строк InnoDB (REDUNDANT/COMPACT; в 5.7 и ранее также отключённый innodb_large_prefix); суммарная длина составного индекса по нескольким столбцам, превышающая предел; большой первичный ключ.
Как исправить
Сократите длину индексируемого столбца или используйте префиксный индекс: CREATE INDEX idx ON my_table (my_column(191)); Перейдите к пределу 3072 байта с форматом строк DYNAMIC/COMPRESSED (DYNAMIC используется по умолчанию в MySQL 8.0; innodb_large_prefix удалён в 8.0 и нужен только в 5.7 и ранее). При необходимости пересмотрите набор символов/длину столбца.
Ещё по этой СУБД
- 1048Столбец 'x' не может быть null
- 1292Некорректное значение datetime / усечено некорректное значение
- 1406Данные слишком длинные для столбца
- 1050Таблица уже существует
- 1051Неизвестная таблица 'x'
- 1091Невозможно выполнить DROP 'x'; проверьте, что столбец/ключ существует
- 1093Нельзя указывать целевую таблицу 'x' для обновления в предложении FROM