Я знаю, что было много вопросов по этому поводу, но я думаю, что моя математика верна.
- MySQL резервирует 3 байта на символ UTF8.
- MyISAM допускает ключи длиной 1000 байт.
- Мой UTF8 VARCHAR (255) должен быть
255 * 3 = 765
байтов
Если UNQUE не требуется дополнительно 200+ байтов на запись, почему это не работает?
mysql> ALTER TABLE entry ADD UNIQUE INDEX (name(255));
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
Что я могу с этим поделать?
EDIT:
Получается, что ограничение составляет 250. Кажется, что символы считаются как 4 байта для уникальных индексов, но я не знаю почему.
РЕДАКТИРОВАТЬ 2:
Спасибо Владиславу Вантроубу, кодировка действительно utf8mb4. Это решает тайну. Я не видел никакой документации по этому изменению.
Я предполагаю, что он создает неуникальный индекс путем неявного усечения поля, что недопустимо для уникальных индексов, поэтому он отказывается.
Если вы повторно введете свой комментарий в качестве ответа, я буду рад принять его.
Решение: Укажите utf8, а не utf8mb4 (MySQL Admin не позволяет этого, поэтому создайте таблицу вручную)