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

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

第一列是primary key,我知道.csv和数据库都没有重复的主键。主键如下所示:0015000000b0Y2u

我的问题是:如何将这1000多行(它们自身带有唯一的primary keys)导入到预先存在的2291行中,而不会出现#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自动递增,因为我已经研究过了,这不是我要寻找的解决方案。

我尝试更改重复的条目违规者密钥,但无济于事,出现同样的错误。有人可以帮我吗?

最佳答案

我怀疑问题在于您的主键是具有不区分大小写的排序规则(例如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字符集和latin1_swedish_ci归类,则可能要将列的归类更改为latin1_general_cslatin1_bin

例如

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

10-07 19:52
查看更多