2013년 1월 28일 월요일

MySQL 한글이 안될 때

한글이 안 되는 경우

MySQL 사용 시 한글이 안 될 경우 세 부분을 의심해 보아야 한다.

1. MySQL 서버 characterset 설정.
2. 사용하고 있는 툴의 문자 인코딩 지원 종류.
3. 쿼리를 저장한 파일 혹은 데이터 파일의 문자 인코딩 방식.

한글을 사용하려면 문자 인코딩 방식을 euc-kr나 Unicode를 지원해야 한다. 요즘 쿼리 툴은 대부분 Unicode 중 utf-8을 지원하기 때문에 2번은 크게 문제가 되지 않는다. 물론 확인은 해 봐야 한다. 3번도 무료로 사용할 수 있는 Sublime Text 등을 이용하면 쉽게 확인할 수 있다. 문제는 1번이다.

MySQL을 설치하고 utf-8을 기본으로 제공해 주면 좋은데 그렇지가 않다. 다음은 설치 후 MySQL의 상태를 확인한 화면이다.

mysql> status
--------------
mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1
 
Connection id:          20
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.95 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 6 days 5 hours 2 min 54 sec
 
Threads: 1  Questions: 41  Slow queries: 0  Opens: 13  Flush tables: 1  Open tables: 6  Queries per second avg: 0.000
--------------

mysql> 

문자 인코딩 방식이 latin1이다. 이러니 한글이 안되지... utf-8으로 바꿔보자.

MySQL Characterset 바꾸기

문자셋을 바꾸려면 /etc/my.cnf 파일의 해당 부분에 다음 내용을 추가한다.

# vi /etc/my.cnf
 
[mysqld]
...
default-character-set=utf8
collation-server=utf8_unicode_ci
character-set-server=utf8
character-set-client-handshake=FALSE
...

[client]
default-character-set=utf8
...    

그리고 나서 재시작. 다시 상태를 확인해 보면,

mysql> status
--------------
mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1
 
Connection id:          2
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.95 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 22 sec
 
Threads: 1  Questions: 5  Slow queries: 0  Opens: 12  Flush tables: 1  Open tables: 6  Queries per second avg: 0.227
--------------

mysql> 

이제 한글을 사용할 수 있다.

저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No

댓글 없음:

댓글 쓰기