2014-01-27 3 views
3

로드 데이터 로컬 INFILE에 문제가있어서 utf8 파일을로드 중입니다. 쿼리는 다음과 같습니다특수 문자가있는 MySQL LOAD DATA INFILE 문제

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE artikel CHARACTER SET UTF8 
FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

그러나 "Dämmung"와 같은 특수 문자 필드가 "D"에 절단됩니다.

SHOW VARIABLES LIKE '%_set_%'; 

utf8로 설정되었으며, 메모장 ++을 사용하여 파일이 utf8인지 확인합니다. 누군가가 조언을 알고 있다면 정말 도움이 될

, 그것은 거대한 파일 그리고 나는 수동으로 잘못된 필드를 입력하지 않도록하고 싶습니다 : -/

+0

:이 솔루션의 단점은 당신이 가져 오는 동안 외래 키 체크를 해제하려는 경우 SUPER 권한을 요구하는, 전 세계적으로 사용하지 않도록 설정해야합니다 (MyISAM 테이블에 적용되지 않습니다)이다 연결, 데이터베이스, 테이블 및 열 인코딩을 CSV 파일에 저장된 것과 동일한 문자 집합으로 변환합니다. –

+0

@SathishD : 아니요, 그렇지 않습니다.하지만 그렇게해도 OP는 모든 문자 집합 변수가 utf8로 이미 설정되어 있음을 나타냅니다. * 인코딩 열이 파일 *의 모든 문자를 지원하지 않을지라도 (파일과 동일한 인코딩 일 필요는 없음) 데이터는 잘릴 수 있습니다. – eggyal

+0

빠른 답변 주셔서 감사합니다! 그 원인은 위의 쿼리가 정확하도록 테이블을 올바르게 업데이트하지 않은 선택 쿼리였습니다. Sry guys, 내 잘못 – user3181103

답변

3

저도 같은 문제가되었다. 이 문제를 해결하는 "해킹"이 있습니다. 모든 것이 UTF8로되어 있습니다. 예외는 "LOAD DATA LOCAL ...."입니다. UTF8 대신 LATIN1을 사용하면 정상적으로 작동합니다.

0

불행히도 LOAD DATA은 cli 옵션에 전달되고 테이블에서 사용되는 charset에 관계없이 utf8 입력을 허용하지 않습니다. 설명서에서 찾지 못했고 버그라고 가정합니다.

대신에 mysqlimport을 사용하십시오. 당신은 설정해야

echo "SET GLOBAL FOREIGN_KEY_CHECKS=0;" | mysql -u root -p