MySQL의 LOAD 명령은 CSV 파일의 데이터를 테이블로 가져오는 간단한 방법을 제공합니다. 그러나 빈 필드가 포함된 CSV 파일에서 숫자 데이터를 로드할 때 MySQL은 열이 Null 허용으로 정의된 경우에도 NULL 대신 0을 삽입하는 경향이 있습니다.
다음 CSV 파일(testdata.txt)을 고려하세요.
1,2,3,4,5 1,2,3,,5 1,2,3
그리고 다음 MySQL 테이블(moo):
CREATE TABLE moo ( one INT(1) NULL, two INT(1) NULL, three INT(1) NULL, four INT(1) NULL, five INT(1) NULL );
CSV 데이터를 moo에 로드할 때 LOAD 명령을 사용하여 테이블:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";
결과 테이블에는 다음이 포함됩니다.
+------+------+-------+------+------+ | one | two | three | four | five | +------+------+-------+------+------+ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | +------+------+-------+------+------+
관찰할 수 있듯이 MySQL은 빈 필드에 0을 할당합니다. 이는 열이 NULL 값을 허용하는 경우 올바르지 않습니다. .
이 문제를 해결하고 빈 필드가 NULL로 올바르게 처리되도록 하려면 NULLIF() 함수를 활용하세요. NULLIF()는 확인할 필드와 필드가 비어 있는 경우 반환할 값이라는 두 가지 인수를 사용합니다. 사용 방법은 다음과 같습니다.
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (one, two, three, @vfour, five) SET four = NULLIF(@vfour,'') ;
이 예에서는 네 번째 필드를 지역 변수 @vfour로 읽어옵니다. 그런 다음 @vfour가 빈 문자열인 경우 SET 문은 4를 NULL에 할당합니다.
여러 필드가 비어 있을 수 있는 경우 해당 필드를 모두 로컬 변수로 읽고 여러 SET 문을 활용하세요.
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (@vone, @vtwo, @vthree, @vfour, @vfive) SET one = NULLIF(@vone,''), two = NULLIF(@vtwo,''), three = NULLIF(@vthree,''), four = NULLIF(@vfour,'') ;
NULLIF()를 활용하면 이제 MySQL LOAD가 빈 필드를 올바르게 처리하고 NULL 값을 할당할 수 있으므로 MySQL 테이블의 데이터로 정확하게 작업할 수 있습니다.
위 내용은 LOAD DATA INFILE을 사용하여 빈 필드가 있는 CSV 데이터를 MySQL로 가져올 때 0 대신 NULL 값을 어떻게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!