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

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有一个唯一的索引,我使用DISTINCTselect并从tag_names中截断所有现有数据。
什么会产生这个错误?

最佳答案

这可能是因为使用distinct进行字符串比较时,表collationsparim_firm_tag_names上定义的不同parim_marksona可能导致区分大小写和不区分大小写的值不同。
可以使用此查询检查列的collation

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

为避免此错误,可以使用collation将column的collation转换为column的collation,同时从表sona中选择不同的值。
假设列的排序规则为:
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 Collation

关于mysql - SELECT DISTINCT不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12347363/

10-11 04:45