LOAD DATA LOCAL INFILE 'data.csv'
INTO TABLE table_name;
> ERROR 1300 (HY000): invalid utf8mb4 character string : ''
해당 에러는 파일의 인코딩이 utf8이 아닌데 MySQL Server에 CHARACTER SET utf8mb4로 저장하려는 경우 발생합니다.
해결방법은 두가지가 있습니다.
- MySQL Server에 파일 인코딩을 알려주기
- 파일 인코딩을 MySQL Server가 저장하려는 값으로 변경
1) MySQL Server에 파일 인코딩을 알려주기
# 파일 인코딩 확인
[root@DB data]$ file -i data.csv
data.csv: text/plain; charset=iso-8859-1
첫번째 방법과 동일하게 먼저 파일의 인코딩값을 확인한 후, 인코딩값과 매칭되는 MySQL 의 CHARACTER SET 을 찾습니다.
파일 인코딩 확인 결과 (file -i 결과) | LOAD DATA에서 사용할 CHARACTER SET |
iso-8859-1 | latin1 |
utf-8 | utf8mb4 |
utf-8 with BOM | utf8mb4 |
euc-kr | euckr |
ks_c_5601-1987 | euckr |
cp949 | cp949 |
windows-1252 | latin1 |
ANSI_X3.4-1968 | ascii |
Big5 | big5 |
GB2312, GB18030 | gb2312 또는 gb18030 |
Shift_JIS, SJIS | sjis |
windows-1251 | cp1251 |
macroman (Mac) | macroman |
파일 인코딩과 올바른 CHARACTER SET을 확인한 후 LOAD DATA를 수행합니다.
LOAD DATA LOCAL INFILE 'data.csv'
INTO TABLE table_name
CHARACTER SET latin1;
위 예시에서 file -i 로 확인한 charset이 iso-8859-1이므로 CHARACTER SET 옵션을 latin1 으로 설정합니다.
동일 에러가 발생하지 않은 경우 정상 처리된것입니다.
2) 파일 인코딩을 MySQL Server가 저장하려는 값으로 변경
# 파일 인코딩 확인
[root@DB data]$ file -i data.csv
data.csv: text/plain; charset=iso-8859-1
# 파일 인코딩 변경
[root@DB data]$ iconv -f iso-8859-1 -t utf-8 data.csv -o data_utf8.csv
위와 같이 인코딩을 변경한 후 LOAD DATA를 수행합니다.
LOAD DATA LOCAL INFILE 'data_utf8.csv'
INTO TABLE table_name;
'Database > MySQL' 카테고리의 다른 글
[MySQL] 에러로그 모니터링 (log_error_services) (2) | 2025.07.22 |
---|---|
[MySQL] InnoDB Redo Log (+ Lock-Free WAL 구조) (0) | 2025.06.13 |
[MySQL] Change Buffer 체인지 버퍼 (0) | 2025.04.10 |
[MySQL] Undo Log & Undo Tablespace (0) | 2025.04.09 |
[MySQL] InnoDB Cluster 3부작 : 3. MySQL InnoDB Cluster Metadata 생성 및 MySQL Router 구성하기 (0) | 2025.04.01 |