2

我正在尝试将表的一个字段的不同值插入到表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
4

1 回答 1

1

requests表中,video_id字段定义为:

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

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

`video_id` char(5)

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

于 2013-03-21T03:57:06.970 回答