본문 바로가기
데이터베이스/Mysql

MySQL database character set 변경

by 초이MS 2020. 6. 3.

상황

  • ERROR 1366 (HY000) : incorrect string value : '\xED\x95\x9C\xEA\xB2\x8C...' for column 등과 같은 에러메시지를 보여준다.

이유

  • Mysql 데이터베이스가 latin1 문자열을 이용하기에 받아들이지 못하는 문자열이 있어 입력 오류가 발생한다.

해결방안

Mysql 기본 charset 변경

  1. MySQL my.cnf 파일찾기을 참고하여 my.cnf 파일을 찾는다.

  2. my.cnf 파일에 다음을 추가한다.

      [mysqld]
      ...
      collation-server = utf8mb4_unicode_ci
      character-set-server = utf8mb4
      skip-character-set-client-handshake
      ...
  3. mysql을 재시작한다.

기존 데이터베이스, 테이블 charset 변경

  1. 다음의 명령어를 이용하여 mysql 데이터베이스를 백업한다.

     $ mysqldump -u ${username} -p ${password} -c -e --default-character-set=utf8mb4 --single-transaction --skip-set-charset --add-drop-database -B ${dbname} > dump.sql
  2. 백업한 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
  3. 수정한 mysql 쿼리를 다음과 같이 적용한다.

     $ mysql -u ${username} -p ${password} < dump-fixed.sql

참고

반응형

댓글