mysql 5.7 — указанный ключ был слишком длинным; максимальная длина ключа составляет 3072 байта

#mysql

#mysql

Вопрос:

Один из моих talbe имеет многоколоночный индекс с общим количеством 1011 символов. механизм хранения — InnoDB.

Та же таблица отлично работала в mysql 5.6.26. но теперь, когда я обновился до mysql 5.7.16, я получаю сообщение об ошибке Указанный ключ был слишком длинным; максимальная длина ключа составляет 3072 байта.

Я знаю, что существует ограничение на общий размер индекса. но вопрос в том, почему он работал в 5.6 и перестал работать в 5.7. Могу ли я что-нибудь сделать, не уменьшая размер столбцов.

Комментарии:

1. dba.stackexchange.com/questions/49913/…

2. хорошо, но почему то же самое работает в 5.6 — мы используем 5.6 уже два года без каких-либо ошибок

Ответ №1:

Проблемой для нас был набор символов по умолчанию. В старой версии 5.6 моим набором символов по умолчанию был latin1, но когда я установил 5.7.16, я не менял набор символов, и по умолчанию был utf8, что привело к увеличению размера столбца, поскольку utf занимает больше байтов, что приводит к ошибке. изменение набора символов по умолчанию на latin1 и воссоздание таблицы устранили проблему.

 [mysqld]
character-set-server=latin1

[client]
default-character-set=latin1

[mysql]
default-character-set=latin1
 

Комментарии:

1. Если это окончательное решение вашей проблемы, вы должны принять свой собственный ответ как правильный.