Я пытаюсь создать таблицу в 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
Если я уменьшу Тег в поле VARCHAR (78) таблица создается, однако VARCHAR (79) не работает. Почему любой размер varchar больше 78 не работает? Я прочитал несколько сообщений в Интернете о том, что MySQL хранит VARCHAR как UTF-8, который может занимать до шести байтов, но 79 * 6 - это 474, что находится в пределах 1000-байтового ограничения, поэтому не уверен, что они UTF-8 точны .
Ваш первичный ключ состоит из тега и логина, общая длина которых составляет 355 символов.
Если тег равен 78 символам, общее количество составляет 333, поэтому похоже, что MySQL делает предположение о 3 байтах на символ:
(78 + 255) * 3 = 999, (79 + 255) * 3 = 1002
Тем не менее, значения VARCHAR, как известно, не подходят для первичных ключей.
Вместо этого рассмотрите возможность добавления INT.