DBAtlas · Атлас эксплуатации баз данных

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 и ранее). При необходимости пересмотрите набор символов/длину столбца.

Открыть в DBAtlas →

Ещё по этой СУБД