Уникальные ключи MyISAM обрезаются на 64 байта, что вызывает коллизии

У меня есть таблица 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 байт?

РЕДАКТИРОВАТЬ: Похоже, что длина префикса не указана в вызове 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.

5
задан OMG Ponies 26 April 2011 в 03:30
поделиться