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 백업 :
2. /etc/my.cnf 에 한글화 코드 삽입
3. DB서버 재시동
4. 기존 DB drop 하고 새로 만들기
5. 백업한 DB 파일 수정
6. 수정한 DB백업파일 복원
7. 필요한 csv 또는 txt 포멧의 DB파일 복원
위와같이 한 후 웹페이지에서 한글 데이터를 확인했을때 한글이 "?????" 로 계속 나오고 있다면
아래와 같이 스크립트의 DB 연결 부분을 찾아서 수정해준다.
필자는 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
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명;
mysql> create database DB명;
5. 백업한 DB 파일 수정
$ vi dumped_db.sql
:%s/latin1/euckr/g //파일내의 모든 latin1 을 euckr 로 바꾼다.
:%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);
...
...
?>
<?php
...
...
$connect=mysql_connect($host, $user, $pass);
mysql_query("set names euckr", $connect);
...
...
?>