Daniel's Knowledge Storage

[스크랩] MySQL characterset을 latin1 으로 사용해온 한글 DB euckr 로 변경하기 (한글 깨질때) 본문

Develop

[스크랩] MySQL characterset을 latin1 으로 사용해온 한글 DB euckr 로 변경하기 (한글 깨질때)

다니엘SEO 2009. 12. 2. 09:49
출처 : http://blog.nice2seeyou.com/mike/

필자는 CentOS 4.4 에 패키지로 설치된 MySQL v4.1.20을 오랜동안 사용해왔다. 기본 characterset 설정을 계속 사용해 왔고 웹페이지에서 한글로 표시되는데 문제가 없어서 그냥 사용해왔다.

그러나 계속 사용하면서 한글화 작업이 불가피함을 느끼게 되었다.

(문제1) phpMyAdmin 을 설치하고 부터였다. 우선 phpMyAdmin 에서는 DB에 기록되어 있는 한글 데이터가 모두 깨져서 나온다.

(문제2) load data infile 을 쓰게되면 한글 데이터에 한해서 모두 "?????" 로 표시된다.

데이터베이스를 한글화 하는 길만이 이 문제들을 풀 수 있을것 같아서 웹사이트를 닫고 DB서버를 수정했다.


[ DB  한글화 작업 ]

1. DB 백업 :
$ mysqldump -u사용자계정 -p --default-character-set latin1 DB명 > dumped_db.sql

2. /etc/my.cnf 에 한글화 코드 삽입
[client]
default-character-set=euckr

[mysqld]
init_connect=SET collation_connection=euckr_korean_ci
init_connect=SET NAMES euckr
default-character-set=euckr
character-set-server=euckr
collation-server=euckr_korean_ci
language=korean

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


3. DB서버 재시동
# service mysqld restart


4. 기존 DB drop 하고 새로 만들기
mysql> drop database DB명;
mysql> create database DB명;


5. 백업한 DB 파일 수정
$ vi dumped_db.sql

:%s/latin1/euckr/g    //파일내의 모든 latin1 을 euckr 로 바꾼다.


6. 수정한 DB백업파일 복원
$ mysql -u사용자계정 -p DB명 < dumped_db.sql


7. 필요한 csv 또는 txt 포멧의 DB파일 복원
mysql> load data local infile "/home/사용자계정/dumped_table.txt" into table 테이블명 fields terminated by "," lines terminated by "\r\n";


위와같이 한 후 웹페이지에서 한글 데이터를 확인했을때 한글이 "?????" 로 계속 나오고 있다면
아래와 같이 스크립트의 DB 연결 부분을 찾아서 수정해준다.
$ vi config.php
<?php
...
...
$connect=mysql_connect($host, $user, $pass);
mysql_query("set names euckr", $connect);
...
...
?>

Comments