设为首页 - 加入收藏 云计算网_泰州站长网 (http://www.0523zz.com)- 中小站长必上的网站 - 聚焦泰州站长前沿资讯!
热搜: 芯片 2008 1000 iphone
当前位置: 主页 > 站长学院 > MySql教程 > 正文

mysql – MyISAM唯一键被切断为64字节,导致冲突

发布时间:2021-04-01 05:47 所属栏目:[MySql教程] 来源:网络整理
导读:我有一个MySQL表将url存储为唯一键.我开始在我的键上发生冲突,因为看起来键本身只是前任64个字节(或者你喜欢的字符,它是latin-1整理的)任何url.因此,如果一个网址超过64个字符,并且我已经有一个类似的网址,则会抛出错误. 例如: SELECT l.link_id FROM myd

我有一个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'

抛出此错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 
'http://etonline.com/tv/108475_Charlie_Sheen_The_People_Have_Elec' for key 'url'

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

我尝试在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

我认为回退只是因为我通过My??SQL Workbench运行了ALTER TABLE. 最佳答案 当您创建仅使用前缀的索引(通过指定索引的长度)时,前缀最多可达1000个字节(请参阅7.5.1 Column Indexes).使用SHOW CREATE TABLE查找索引的实际长度.

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章