MySQL и MariaDB LinuxWindowsmacOS 1071

MySQL: ERROR 1071 — Specified key was too long

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Индекс превышает допустимую длину из-за utf8mb4. Сократите длину индексируемого поля, используйте префиксный индекс или DYNAMIC row format.

В этой статье
  1. Что означает ошибка
  2. Причины и признаки
  3. Пошаговое решение
  4. Если проблема осталась

#Что означает ошибка

1071
Specified key was too long

Индекс превышает допустимую длину из-за utf8mb4. Сократите длину индексируемого поля, используйте префиксный индекс или DYNAMIC row format.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Длинный VARCHARВ случае «MySQL: ERROR 1071 — Specified key was too long» проверьте наличие причины «Длинный VARCHAR» по исходному действию и связанному сообщению; переходить к исправлению стоит после её подтверждения.Сократите. Конкретное действие зависит от проверки причины «Длинный VARCHAR», описанной в пошаговой инструкции.
Старый форматВ случае «MySQL: ERROR 1071 — Specified key was too long» проверьте наличие причины «Старый формат» по исходному действию и связанному сообщению; переходить к исправлению стоит после её подтверждения.Выберите в настройках нужный режим или формат и сравните тестовый результат; исходное значение запишите.
Составной индексВ случае «MySQL: ERROR 1071 — Specified key was too long» проверьте наличие причины «Составной индекс» по исходному действию и связанному сообщению; переходить к исправлению стоит после её подтверждения.Разделите
Старая версияСопоставьте версию установленного компонента с требованиями «MySQL» и моментом, когда впервые появилась проблема.Проверьте поддерживаемые версии и установите корректный пакет с официального источника после сохранения текущих настроек.

#Пошаговое решение

  1. Определите причинуСохраните полный текст ERROR 1071, имя индекса и определение таблицы через SHOW CREATE TABLE имя_таблицы;. Обратите внимание на движок, кодировку utf8mb4, длину строковых колонок и ограничения конкретной версии MySQL/MariaDB. Не сокращайте любой индекс до произвольного числа без понимания запросов.
  2. Выполните подходящее исправлениеВ SQL-редакторе определите суммарную длину индексируемых байт, а не только символов: utf8mb4 может занимать до четырёх байт на символ. Для длинной колонки допустим префиксный индекс column(191), если это соответствует назначению ключа; для уникального индекса префикс может изменить смысл уникальности.
  3. Проверьте другие возможные причиныСверьте возможности версии InnoDB, формат строки и размер страницы по официальной документации именно этой версии. Не включайте устаревшие опции innodb_large_prefix механически: в новых релизах они удалены. При миграции лучше адаптировать схему к поддерживаемым размерам ключей и характеру запросов.
  4. Убедитесь в результатеСделайте копию схемы и данных, примените изменение индекса сначала на тестовой базе и выполните запросы с EXPLAIN. После создания индекса убедитесь, что импорт завершился и уникальность бизнес-ключей сохранена; проверяйте реальные ограничения, а не только отсутствие 1071.

#Если проблема осталась

Если «MySQL: ERROR 1071 — Specified key was too long» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.