尽管没有重复,但在mySQL / phpMyAdmin中收到#1062重复错误

时间:2013-01-02 20:04:00

标签: php mysql database phpmyadmin key

我目前有一个名为Spreadsheet的数据库,有2291行,每行有6列。

我还有一个.csv文件,其中1000多个行具有相同的6列,但其中三个默认设置为NULL(与我的数据库中的某些数据相同,这意味着,有些是默认设置为NULL)。我试图将它们(不是replace)导入现有数据库。

第一列是primary key,我知道.csv和数据库都没有重复的主键。主键看起来像这样:0015000000b0Y2u

我的问题是:如何在预先存在的2291行中导入这1000多行(它们自带唯一的primary keys)而不会出现#1062错误?

SQL query:

INSERT INTO  `Spreadsheet` (  `accountID` ,  `accountName` ,  `website` ,  `rating` ,  `imageURL` ,  `comments` ,  `category` ) 
VALUES (

'0015000000b0Y3z',  'Kittredge and Associates Inc',  'kittredgeandassociates.com', NULL ,  'kittredgeandassociates.com.jpg', NULL , NULL
)
MySQL said: 

#1062 - Duplicate entry '0015000000b0Y3z' for key 'PRIMARY' 

上面附上的是我收到的#1062错误,尽管100%确定我没有PRIMARY的重复密钥。

我不想让mySQL自动增量,因为我已经研究过了,这不是我想要的解决方案。

我已尝试更改重复的条目罪犯密钥,但无效,同样的错误。有人可以帮我一把吗?

2 个答案:

答案 0 :(得分:3)

我怀疑问题是您的主键是具有不区分大小写的排序规则的字符列(例如latin1_swedish_ci)。如果是这样,小写字母和大写字母被认为是“相等”,这将导致重复。

这是一个演示。请注意collat​​ion_name值的差异:

CREATE TABLE t3 (mycol VARCHAR(4) COLLATE latin1_swedish_ci PRIMARY KEY );
INSERT INTO t3 VALUES ('A'),('a');

-- Error Code: 1062
-- Duplicate entry 'a' for key 'PRIMARY'

CREATE TABLE t4 (mycol VARCHAR(4) COLLATE latin1_bin PRIMARY KEY );
INSERT INTO t4 VALUES ('A'),('a');

-- 2 row(s) affected

如果您需要MySQL将大写和小写字母视为不相等,则需要为该列指定区分大小写或二进制排序规则,而不是不区分大小写的排序规则。

(注意:MySQL在排序规则名称的末尾命名不区分大小写且排名为_ci的排序规则,例如latin1_swedish_ci。)

如果列目前是latin1 characterset和latin1_swedish_ci排序规则,您可能希望将列上的排序规则更改为latin1_general_cslatin1_bin

e.g。

ALTER TABLE t3 CHANGE mycol mycol VARCHAR(4) COLLATE latin1_general_cs ;

http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html

http://dev.mysql.com/doc/refman/5.5/en/adding-collation.html

答案 1 :(得分:0)

如果您没有违反PK和任何其他唯一索引,那么不确定如何获得此错误。解决方案可能是使用ON DUPLICATE KEY UPDATEIGNORE关键字。