상황
- ERROR 1366 (HY000) : incorrect string value : '\xED\x95\x9C\xEA\xB2\x8C...' for column 등과 같은 에러메시지를 보여준다.
이유
- Mysql 데이터베이스가 latin1 문자열을 이용하기에 받아들이지 못하는 문자열이 있어 입력 오류가 발생한다.
해결방안
Mysql 기본 charset 변경
MySQL my.cnf 파일찾기을 참고하여 my.cnf 파일을 찾는다.
my.cnf 파일에 다음을 추가한다.
[mysqld] ... collation-server = utf8mb4_unicode_ci character-set-server = utf8mb4 skip-character-set-client-handshake ...
mysql을 재시작한다.
기존 데이터베이스, 테이블 charset 변경
다음의 명령어를 이용하여 mysql 데이터베이스를 백업한다.
$ mysqldump -u ${username} -p ${password} -c -e --default-character-set=utf8mb4 --single-transaction --skip-set-charset --add-drop-database -B ${dbname} > dump.sql
백업한 mysql 쿼리를 복사 후 다음과 같이 수정한다.
$ cp dump.sql dump-fixed.sql $ vi dump-fixed.sql (vi) :%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci/g (vi) :%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8mb4/g (vi) :w!q
수정한 mysql 쿼리를 다음과 같이 적용한다.
$ mysql -u ${username} -p ${password} < dump-fixed.sql
참고
반응형
'기타' 카테고리의 다른 글
[Hadoop] Distcp 시 Check-sum mismatch 현상 (0) | 2020.06.08 |
---|---|
[Spark] yarn cluster 모드 시 한글 깨짐 현상(UnicodeEncodeError) (0) | 2020.06.04 |
Airflow Exception: Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql (0) | 2020.06.03 |
Excel에 ODBC 연동하기(Mac) (1) | 2020.06.03 |
MySQL mysql Index column size too large the maximum column size is 767 bytes. (0) | 2020.06.03 |