MySQL VARCHAR(255) UTF8 слишком длинный для ключа, но максимальная длина - 1000 байт

Я знаю, что было много вопросов по этому поводу, но я думаю, что моя математика верна.

  • 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 байтам, но я не знаю почему.

EDIT 2:

Спасибо Владиславу Вайнтубу, чарсет действительно utf8mb4. Это разгадывает загадку. Я не видел никакой документации по этому изменению.

Я предполагаю, что он строит не уникальный индекс путем неявного усечения поля, что недопустимо для уникальных индексов, поэтому он отказывается.

Если вы снова введете свой комментарий в качестве ответа, я с радостью приму его.

Решение: Укажите utf8, а не utf8mb4 (MySQL Admin не разрешает этого, поэтому создайте таблицу вручную)

42
задан Mathias Bynens 7 August 2012 в 07:01
поделиться