15

为什么此查询会产生“重复条目”错误?

TRUNCATE parim_firm_tag_names;
INSERT INTO parim_firm_tag_names (firm_tag_name_value) 
    SELECT DISTINCT sona 
    FROM parim_marksona;

错误信息:

SQL 错误 (1062): 重复条目 '1-??????? ??????' 对于键“firm_tag_name_value”

如您所见,firm_tag_name_value有一个唯一索引,我使用DISTINCTselect 并截断所有现有数据tag_names

什么会产生这个错误?

4

2 回答 2

16

这可能是因为collations两个表上定义的不同,parim_firm_tag_names并且 parim_marksona使用 distinct 的字符串比较可能会导致区分大小写和不区分大小写的collation值不同。

您可以collation使用此查询检查列:

SHOW FULL COLUMNS FROM parim_marksona;
SHOW FULL COLUMNS FROM parim_firm_tag_names;

为避免此错误,您可以使用 将列的排序规则转换为列的sona排序规则,同时从 table 中选择不同的值。firm_tag_name_valueCOLLATEparim_marksona

假设列的排序规则firm_tag_name_valuelatin1_swedish_cs

TRUNCATE parim_firm_tag_names;

INSERT INTO parim_firm_tag_names (firm_tag_name_value)
    SELECT DISTINCT sona COLLATE latin1_swedish_cs
    FROM parim_marksona;

这应该可以正常工作。

有关更多详细信息,请参阅手册Column Character Set and Collat​​ion

于 2012-09-10T07:56:29.257 回答
1

两个表之间的字符集不同,也许?

于 2012-09-10T07:56:37.790 回答