Как мне увеличить длину ключа в MySQL 5.1? - PullRequest
5 голосов
/ 05 мая 2011

При запуске миграции на Rails, которая создает индекс, я получаю:

Mysql::Error: Specified key was too long; max key length is 1000 bytes: CREATE UNIQUE INDEX `index_matches_on_foo_and_bar_id_and_baz_id` ON `matches` (`foo`, `bar_id`, `baz_id`)

Какую переменную MySQL мне нужно установить, чтобы увеличить ее, и где я должен установить ее, чтобы она влияла на все сеансы, ине только текущий сеанс клиента?

Ответы [ 3 ]

9 голосов
/ 05 мая 2011

InnoDB фактически позволяет только 768 байт в индексе. Кроме того, обратите внимание, что строки в кодировке UTF-8 занимают 3 байта на символ, поэтому в этом случае у вас есть только 768/3 символа для воспроизведения в индексе.

Возможным решением является ограничение длины использования поля в индексе. Однако, так как вам также нужен уникальный индекс, это может оказаться неприемлемым решением для вас. Используйте следующее, чтобы ограничить длину используемых полей.

CREATE UNIQUE INDEX `index_matches_on_foo_and_bar_id_and_baz_id` ON `matches` (`foo`(100), `bar_id`(100), `baz_id`(100))
8 голосов
/ 05 мая 2011

Из руководства MySQL :

"Максимальная длина ключа составляет 1000 байтов. Это также можно изменить, изменив источник и перекомпиляция "

0 голосов
/ 22 апреля 2018

Просто измените параметры сортировки с одного параметра на другой, который поддерживает необходимую длину ключа. Лично мне пришлось изменить значение с сервера по умолчанию на латиницу 1 - по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...