My Sql Bulk는 데이터를 잘리는 방식으로 삽입합니다.

bulkinsert mysql sqlbulkcopy truncation

문제

대량 삽입 옵션을 통해 CSV 파일에서 MYSql 데이터베이스로 데이터를로드하려고합니다. 아래는 테이블 구문과 CSV 파일 생성입니다.

CREATE TABLE discounts (
    id INT NOT NULL ,
    title VARCHAR(10) NOT NULL,
    expired_date DATE NOT NULL,
    amount VARCHAR(255 ) NOT NULL

);

CSV 파일 형식 :

"475","Back","20140401","FFFF"
"476","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","20140901","DDD"

SQL 쿼리 :

LOAD DATA  INFILE 'C:\Users\karthick\Desktop\data.csv' 
INTO TABLE discounts 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

위의 테이블 구문을 만들 때 "title"데이터 길이를 "10"으로 지정했습니다. 그러나 두 번째 행에 대한 데이터 파일의 값은 길이가 10을 초과합니다.

내가 SQL 쿼리를 실행하면 데이터가 MySQL 데이터베이스에 성공적으로로드되고 아래의 출력과 두 번째 행의 My 값이 "title"필드에 대해 잘립니다. 행을 자르지 않고 행로드를 중지하는 방법을 제안 해주십시오. 또한 데이터가 적절한 경우 종료하지 않고 다음 연속 행을로드해야합니다. 제안 해주세요.

데이터베이스 출력 :

'475', 'Back', '2014-04-01', 'FFFF'
'476', 'bbbbbbbbbb', '2014-09-01', 'DDD'

인기 답변

내 이해에 따라, 아래에서 몇 가지 목표를 달성하고 싶습니다.
1) 표제 길이가 표 구조에 따라 지정된 필드 길이보다 길면 데이터가 잘리지 않아야합니다.
2) 타이틀 길이가 더 길면 레코드 가져 오기 및 나머지 프로세스를 계속 진행하면서 해당 레코드를 건너 뛰어야합니다.

mysql 데이터베이스를 고려하여 응답 :

sql_mode를 TRADITIONAL로 사용할 수 있습니다 (MySQL이 "기존"SQL 데이터베이스 시스템처럼 동작하도록하십시오.)이 모드의 간단한 설명은 잘못된 값을 열에 삽입 할 때 "경고 대신 오류가 발생합니다"참조 : https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html )

이제이 모드를 설정 한 후 레코드 가져 오기를 수행하는 동안 올바르지 않은 데이터 또는 값이 범위를 벗어나 테이블에 삽입되면 오류가 발생합니다.

다음 부분에서는 범위를 벗어난 값 때문에 오류 행을 건너 뛸 수 없습니다. 기존 토론 링크를 확인할 수 있습니다 : 구분 된 파일에서 mysql 테이블로 데이터를로드하는 동안 오류 줄 건너 뛰기

고유 제한 조건을 위반하거나 중복 레코드를 작성할 수있는 행을 건너 뛰려면 LOAD DATA INFILE과 함께 IGNORE 키워드를 사용하여 건너 뛸 수 있습니다.

참조 : https://dev.mysql.com/doc/refman/5.5/en/load-data.html



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.