Під час міграції 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 мені потрібно встановити, щоб збільшити її, і де її встановити, щоб вона впливала на всі сесії, а не тільки на поточну сесію клієнта?
Відповіді:
9 для відповіді № 1InnoDB фактично дозволяє лише 768 BYTES в індексі. Також зауважте, що закодовані рядки 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 для відповіді № 2
Від Посібник MySQL:
Msgstr "Максимальна довжина ключа - 1000 байтів. \ T Це також можна змінити шляхом зміни джерело та перекомпіляція "
0 для відповіді № 3
Просто змініть сортування з однієї опції на іншу, яка підтримує необхідну довжину ключа. Мені персонально довелося chnage від сервера за замовчуванням до латини 1 - за замовчуванням.