MySQl: указанный ключ слишком длинный..max 1000 байт?
Я пытаюсь создать таблицу в MySQL с заявлением:
CREATE TABLE tags (Tag VARCHAR(200) NOT NULL default '', Login VARCHAR(255) NOT NULL default '', PRIMARY KEY (Tag, Login)) ENGINE=MyISAM;
Однако я получаю сообщение об ошибке:
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
Если я уменьшу поле Tag до VARCHAR(78), таблица будет создана, однако VARCHAR(79) завершится ошибкой. Почему любой varchar размером выше 78 терпит неудачу? Я читал несколько постов в интернете о том, что MySQL хранит VARCHAR как UTF-8, который может занимать до шести байтов, но 79 * 6 - это 474, что находится в пределах 1000 байтов, так что не уверен, что эти UTF-8 точны,
1 ответ
Ваш первичный ключ состоит из тега и логина, длина которых составляет 355 символов.
Если тег равен 78 символам, то общее количество составляет 333, поэтому похоже, что MySQL делает предположение о 3 байтах на символ:
(78 + 255) * 3 = 999, (79 + 255) * 3 = 1002
Тем не менее, значения VARCHAR, как известно, не подходят для первичных ключей.
Попробуйте добавить INT вместо.