2013-01-02 3 views
0

현재 데이터베이스 이름이 Spreadsheet이고 2291 개의 행과 6 개의 열이 있습니다.복제본이 없어도 mySQL/phpMyAdmin에서 # 1062 중복 오류가 발생했습니다.

동일한 6 개의 열이있는 1000 개 이상의 행이있는 .csv 파일도 있습니다. 그 중 3 개가 기본값으로 NULL으로 설정되어 있습니다 (데이터베이스의 일부 데이터와 동일합니다. 일부는 NULL로 설정 됨). 기본값으로도). 나는 그들 (아니 replace)을 기존 데이터베이스로 가져 오려고했습니다.

첫 번째 열은 primary key이고 .csv와 데이터베이스에는 중복 된 기본 키가 없다는 것을 알고 있습니다. 기본 키는 다음과 같습니다. 0015000000b0Y2u

내 질문은 : 고유 한 primary keys과 함께 제공되는 1000 개 이상의 행을 # 1062 오류없이 기존 2291 행으로 가져 오려면 어떻게해야합니까? 위의 첨부

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' 

내가 PRIMARY에 대한 중복 키가없는 것을 100 % 확인에도 불구하고 나는, 수신 된 # 1062 오류입니다.

필자는 mySQL autoincrement를 살펴보고 싶지 않으며, 내가 찾고있는 해결책이 아닙니다.

나는 중복 항목 위반자 키를 변경하려고 시도했지만 아무런 소용이 없다. 동일한 오류. 누군가 내게 돈을 빌려 줄 수 있니?

+0

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

당신은 당신이 중복 키가없는 것을 100 % 확신하는 말을 왜 이해하지, 그럼 * 당신은 변경 시도라고 중복 입력 위반자 키 *? '.csv' 파일에서이 키를 검색했는데 단 하나의 결과 만 찾았습니까? 고양이 무덤에서 복제본이 100 % 확실하다면 기본 키를 삭제할 수 있으며 오류가 발생하지 않습니다. – Kermit

+0

파일을 다시 가져 오기 전에 테이블을 지우는 것을 잊었을 수 있습니까? – devOp

+0

@njk 의심되는 범죄자 키를 다른 값으로 변경하여 작동하는지 테스트했습니다. 그렇지 않았습니다. 기본 키를 삭제하면 무엇을 의미합니까? – theGreenCabbage

답변

3

기본 키가 대소 문자를 구분하지 않는 데이터 정렬 (예 : latin1_swedish_ci)이있는 문자 열로 의심되는 것 같습니다. 그렇다면 소문자와 대문자는 "동등"한 것으로 간주되어 중복 될 수 있습니다.

다음은 데모입니다. collation_name의 값의 차이를 참고 : 동일하지 않은 것으로 대문자와 소문자를 고려하는 MySQL이 필요한 경우

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 

, 당신은보다는, 민감하거나 바이너리 데이터 정렬 경우 중 하나를 지정해야 대/소문자를 구분하지 않는 데이터 정렬

열이 현재 latin1 characterset 및 latin1_swedish_ci 정렬하는 경우, 당신은 아마를 변경하려면 : 이

(. 조합 이름의 끝에 _ci와 대소 문자를 구분하지 않습니다 MySQL의 이름 정렬, 예를 들어 latin1_swedish_ci 주)

열의 데이터 정렬은 latin1_general_cs 또는 latin1_bin이되어야합니다.

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

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

+0

+1 문자를 생각하면 +1 – Kermit

+0

아. 이것은 의미가 있습니다. 데이터 정렬은 실제로'latin1_swedish_ci'입니다. 기본 키 열을'latin1_bin'으로 변경 하시겠습니까? – theGreenCabbage

+0

@ theGreenCabbage : '1c'와 '1c'값이 같지 않다고 생각해야한다면, 예, 대소 문자를 구분하거나 이진 데이터 정렬을 지정해야합니다. (답변이 업데이트되었습니다.) – spencer7593

0

PK와 다른 고유 인덱스를 위반하지 않는 것이 맞으면 어떻게이 오류가 발생하는지 잘 모름. 해결책은 ON DUPLICATE KEY UPDATE 또는 IGNORE 키워드를 사용하는 것입니다.

관련 문제