为什么在将DISTINCT值插入表时会出现“重复条目”错误?

时间:2013-03-21 03:29:11

标签: mysql sql

我正在尝试将表requests的一个字段的不同值插入到表pastmonth的唯一字段中

CREATE TABLE `pastmonth` (
  `video_id` char(5) DEFAULT NULL,
  PRIMARY KEY (`video_id`)
);

INSERT INTO pastmonth (video_id)
SELECT DISTINCT (video_id)
FROM requests
WHERE exec_datetime >= NOW() - 60*24*60*60;

但是我收到此错误

Error Code: 1062. Duplicate entry 'abcde' for key 'PRIMARY'

我不相信表abcde中的值requests有重复的条目,因为以下查询表明只有1个条目,但是如果有的话应该没关系,因为我无论如何都要选择DISTINCT值。

SELECT COUNT(*) FROM requests WHERE video_id = 'abcde';

COUNT(*)
1

我在requests.video_id上有一个非唯一索引,但我认为这与我遇到的问题无关。我有可能有一个腐败的btree索引吗?

修改

CREATE TABLE `requests` (
  `request_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `exec_datetime` datetime DEFAULT NULL,
  PRIMARY KEY (`request_id`),
  KEY `exec_datetime` (`exec_datetime`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

1 个答案:

答案 0 :(得分:1)

requests表中,video_id字段定义为:

`video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,

但是在新表中,它被定义为:

`video_id` char(5)

字符集和相应的排序规则可能存在差异。确保两个字段具有完全相同的字符集和排序规则。