Запустите SHOW CREATE TABLE applications\G
как в своей тестовой, так и в производственной среде.Я предсказываю, что разница будет:
Тест:
CREATE TABLE `applications` (
...
`evid` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Производство:
CREATE TABLE `applications` (
...
`evid` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
Индекс должен умещаться в 767 байтов, как говорит ошибка,Набор символов utf8 подсчитывает 3 байта на символ к этому пределу, поэтому 3 * 255 = 765, что соответствует.
Тогда как utf8mb4 считает 4 байта на символ.4 * 255 = 1020, что слишком долго.
Вы можете индексировать VARCHAR (191), когда используете utf8mb4, чтобы оставаться в пределах 767 байт.
В качестве альтернативы, вы можете использовать более новый формат строки InnoDB для поддержки размера индекса до 3072 байт.См. mysql change innodb_large_prefix
Если вы хотите избежать подобных сюрпризов, важно запустить одну и ту же версию MySQL при тестировании и производстве и убедиться, что вы настроили параметры конфигурации MySQL.как можно ближе и убедитесь, что определения таблиц идентичны.
Re ваш обновленный вопрос с переменными конфигурации innodb.
Я вижу, что ваша производственная среда имеет настройки, которые означают, что она не можетдля определения таблиц с форматом файла Barracuda, что означает отсутствие формата строки DYNAMIC, что означает отсутствие innodb_large_prefix
.
Вам необходимо настроить параметры в соответствии с вашей тестовой средой, а затем вам, вероятно, потребуется перестроить таблицу так,он действительно в формате Barracuda с форматом строк DYNAMIC.
Я также рекомендую (еще раз) обновить тестовый сервер до той же версии MySQL, которую вы используете в рабочей среде.
Также сравните другие параметры конфигурации, чтобы увидеть, есть ли другие различия (кроме тех, которые подходят для отличия от производственной, например, innodb_buffer_pool_size).
Вы также должны убедиться, что используете те жеверсии других частей вашего технического стека, такие как версия для Linux, версия Ruby и т. д. Это хорошо известный источник нестабильности проекта и задержек в расписании, если вы удивляетесь несовместимостью версий, если вам не удается настроить среду разработки и тестирование на соответствие своей работе.окружающая среда.