#Что означает ошибка
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» и моментом, когда впервые появилась проблема. | Проверьте поддерживаемые версии и установите корректный пакет с официального источника после сохранения текущих настроек. |
#Пошаговое решение
- Определите причинуСохраните полный текст ERROR 1071, имя индекса и определение таблицы через
SHOW CREATE TABLE имя_таблицы;. Обратите внимание на движок, кодировку utf8mb4, длину строковых колонок и ограничения конкретной версии MySQL/MariaDB. Не сокращайте любой индекс до произвольного числа без понимания запросов. - Выполните подходящее исправлениеВ SQL-редакторе определите суммарную длину индексируемых байт, а не только символов:
utf8mb4может занимать до четырёх байт на символ. Для длинной колонки допустим префиксный индексcolumn(191), если это соответствует назначению ключа; для уникального индекса префикс может изменить смысл уникальности. - Проверьте другие возможные причиныСверьте возможности версии InnoDB, формат строки и размер страницы по официальной документации именно этой версии. Не включайте устаревшие опции
innodb_large_prefixмеханически: в новых релизах они удалены. При миграции лучше адаптировать схему к поддерживаемым размерам ключей и характеру запросов. - Убедитесь в результатеСделайте копию схемы и данных, примените изменение индекса сначала на тестовой базе и выполните запросы с EXPLAIN. После создания индекса убедитесь, что импорт завершился и уникальность бизнес-ключей сохранена; проверяйте реальные ограничения, а не только отсутствие 1071.
#Если проблема осталась
Если «MySQL: ERROR 1071 — Specified key was too long» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.