잘못된 charset 변경하기 

mysql 이 4.1 대로 버젼업 되면서, 테이블 별로 charset을 지정할 수 있게 되고, 문자열 관련 형식, 예를 들어char(1) 의 숫자가 가리키는 값이 1 byte가 아니라 영문/한글 구분 없이 1글자라는 의미로 바뀌었다고 한다.

mysql 버젼을 업그레이드 하거나 dump된 데이터를 restore 하면서 charset 관련 문제가 많이 발생한다.

utf8을 지원하는 mysql 4.1 이상 버젼에서도 특별히 charset을 지정하지 않으면 기본 값인 latin1로 세팅이 되어버린다. 이 경우에도 charset을 잘못되었지만 당장 한글을 사용하는데 문제가 없는다.
하지만, 그 데이터를 다른 곳으로 옮기려고 할 때 문제가 생긴다.

기본 옵션으로 mysqldump로 sql문을 생성하고 보면, 일반적인 vi환경이나 윈도우 에디터에서 한글이 깨져 보인다. 이것을 정상적인 charset으로 설정된 DB에 import하면 한글이 깨져 보인다.

원초적으로는 mysqldump를 실행할 때 옵션을 줘서 생성되는 dump 파일의 charset을 지정할 수 있다.

mysqldump –default-character-set=latin1 database > 20090819.dump
만약, 이 옵션을 주지 않고 이미 생성된 dump 파일만을 가지고 있다면 아래 방법으로 파일의 charset을 변경할 수 있다.
$ iconv -f utf8 -t latin1 backup.20090819.dump > backup.20090819.euckr.dump

이렇게 하면 일반 console에서도 한글이 깨지지 않는 파일이 생성되는데 dump 파일 내의 SET NAMES 절을 수정 해 준다.
/*!40101 SET NAMES euckr */;

그리고 dump file을 restore 한다.