为什么此查询会产生“重复条目”错误?
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
有一个唯一索引,我使用DISTINCT
选择,我正在截断tag_names
中的所有现有数据。
什么会产生这个错误?
答案 0 :(得分:16)
由于在collations
和parim_firm_tag_names
两个表上定义了不同的parim_marksona
,因此可能会发生这种情况,因为使用distinct的字符串比较可能会在区分大小写且不区分大小写的情况下导致不同的值{{1} }值。
您可以使用此查询检查collation
列:
collation
要避免此错误,您可以使用SHOW FULL COLUMNS FROM parim_marksona;
SHOW FULL COLUMNS FROM parim_firm_tag_names;
将列sona
的排序规则转换为列firm_tag_name_value
的排序规则,同时从表COLLATE
中选择不同的值。< / p>
假设将列parim_marksona
整理为firm_tag_name_value
:
latin1_swedish_cs
这应该没有错误。
有关详细信息,请参阅手册Column Character Set and Collation。