MySQL에서 ESCAPED BY 옵션으로 커스텀 이스케이프 문자 지정하기
백슬래시(\)는 MySQL의 기본 이스케이프 문자입니다. 따라서 텍스트 파일에 백슬래시가 포함되어 있다면, 텍스트 파일에서 테이블로 데이터를 가져올 때 쿼리에 이를 별도로 명시할 필요가 없습니다.
하지만 백슬래시 대신 다른 문자를 이스케이프 문자로 사용하는 경우에는, LOAD DATA 문에 ESCAPED BY 옵션을 사용하여 해당 문자를 반드시 지정해 주어야 합니다.
예제: 별표(*)를 이스케이프 문자로 사용하기
다음과 같이 텍스트 파일에서 별표 기호('*')를 이스케이프 문자로 사용했다고 가정해 보겠습니다.
id,Name,Country,Salary 105,Chum*,Marsh,USA,11000 106,Danny*,Harrison,AUS,12000
이 텍스트 파일을 MySQL 테이블로 가져올 때는 아래와 같이 쿼리에 ESCAPED BY 옵션을 명시해야 합니다.
mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee6_tbl FIELDS TERMINATED BY ',' ESCAPED BY '*' IGNORE 1 ROWS; Query OK, 2 rows affected (0.03 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
여기서 IGNORE 1 ROWS 옵션은 첫 번째 행(컬럼 헤더)은 건너뛰고 데이터만 가져오도록 지정하는 역할을 합니다.
임포트 결과 확인
이제 SELECT 쿼리를 실행하여 실제로 어떻게 데이터가 저장되었는지 확인해 보겠습니다.
mysql> Select * from employee6_tbl; +------+----------------+----------+--------+ | Id | Name | Country | Salary | +------+----------------+----------+--------+ | 105 | Chum,Marsh | USA | 11000 | | 106 | Danny,Harrison | AUS | 12000 | +------+----------------+----------+--------+ 2 rows in set (0.00 sec)
결과를 보면 별표(*)가 이스케이프 문자로 인식되어 제거되고, 'Chum,Marsh'처럼 쉼표가 포함된 값이 하나의 필드(Name)에 정상적으로 저장된 것을 확인할 수 있습니다. 만약 ESCAPED BY '*' 옵션을 지정하지 않았다면, 별표 뒤의 쉼표가 필드 구분자로 잘못 해석되어 데이터가 엉뚱한 컬럼에 들어갔을 것입니다.