Wil*_*rys 5 mysql myisam unique-index unique-key mysql-error-1062
我有一个MySQL表将url存储为唯一键.我开始在我的键上发生冲突,因为看起来键本身只是前任64个字节(或者你喜欢的字符,它是latin-1整理的)任何url.因此,如果一个网址超过64个字符,并且我已经有一个类似的网址,则会抛出错误.
例如:
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'
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
'http://etonline.com/tv/108475_Charlie_Sheen_The_People_Have_Elec' for key 'url'
Run Code Online (Sandbox Code Playgroud)
Isnt 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
Run Code Online (Sandbox Code Playgroud)
我尝试在256处设置一个像这样:
ALTER TABLE `mydb`.`links`
DROP INDEX `url`, ADD UNIQUE INDEX `url` (`url`(256) ASC) ;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
我认为回退只是因为我通过MySQL Workbench运行了ALTER TABLE.
我认为错误消息只显示前64个字符,但这并不意味着约束限制为64个字符.
如果您的SHOW CREATE TABLE输出是准确的,那么索引是所有500个字符,并且您正在达到完全重复.
| 归档时间: |
|
| 查看次数: |
2330 次 |
| 最近记录: |