Я знаю, что в этом было много вопросов, но я думаю, что моя математика правильная.
- MySQL резервирует 3 байта на символ UTF8.
- MyISAM позволяет использовать ключи длиной 1000 байт.
- Мой UTF8 VARCHAR (255) должен быть
255 * 3 = 765
bytes
Если 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 не разрешает это, поэтому создайте таблицу вручную)