У меня есть таблица MySQL, в которой URL-адреса хранятся в виде уникальных ключей.Я начинаю сталкиваться с моими ключами, потому что кажется, что сами ключи являются только первыми 64 байтами (или символами, если вы предпочитаете, это с латинскими цифрами-1) любого URL.Поэтому, если URL-адрес превышает 64 символа, и у меня уже есть аналогичный URL-адрес, выдается ошибка.
Например:
SELECT l.link_id FROM mydb.links l WHERE
url = 'http://etonline.com/tv/108475_Charlie_Sheen_The_People_Have_Elected_Me_as_Their_Leader/index.html'
Выдает эту ошибку:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
'http://etonline.com/tv/108475_Charlie_Sheen_The_People_Have_Elec' for key 'url'
Разве MyISAM не должен иметь длину ключа в 1000 байт?
EDIT: Кажется, что длина префикса, указанная в вызове CREATE TABLE STATUS, не выглядит так:
CREATE TABLE `links` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(500) NOT NULL,
PRIMARY KEY (`link_id`),
UNIQUE KEY `url` (`url`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Я попытался установить его на 256 следующим образом:
ALTER TABLE `mydb`.`links`
DROP INDEX `url`, ADD UNIQUE INDEX `url` (`url`(256) ASC) ;
и получил следующую ошибку:
ERROR 1062: Duplicate entry '<...64-byte key...>' for key 'url'
SQL Statement:
ALTER TABLE `mydb`.`links`
DROP INDEX `url`, ADD UNIQUE INDEX `url` (`url`(256) ASC)
ERROR: Error when running failback script. Details follow.
ERROR 1050: Table 'links' already exists
Я думаю, что откат произошел только потому, что я запустил ALTER TABLEчерез MySQL Workbench.