Unix/Solaris10

MySQL UTF-8+PHP 문제

ForceCore 2008. 7. 9. 01:35
php에서, 한글이 들어간 mysql request가 전혀 먹혀들지 않았다.
왜 그럴까.

1. php에서 한글이 들어간 function call이 먹히나? 그렇다.
한글로 function의 input을 "ㅋㅋㅋ"라고 주고...
function의 output은 input 뒤에 "ㅎㅎㅎ"라고 덧붙이게 코딩을 하여 출력해보면 잘 됨.
php쪽은 이상 없음.

2. mysql만 놓고 봤을 때 한글이 들어간 쿼리는 잘 먹히나?
그렇지 않았다.
???로 떴음.

mysql에 쿼리를 날려보자.
mysql>SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
이렇게 나옴.

설정파일을 수정해야 함을 알 수 있다.
/etc/my.cnf
[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8

[mysql]
default-character-set=utf8

이 것을 추가하니 mysql CLI에서는 잘 되기 시작.
(CLI = command line interface. Shell에서 mysql -uuserid -p 이렇게 접속하는거;)

하지만 여전히 웹페이지에선 안 먹혔다.
phpMyAdmin에서는 잘 되는데...
select * from ??? where name='강강강' 이런 query...

이 글을 컨닝:
http://www.duppio.com/wk/index.php/Change_the_character_set_from_latin1_to_utf8_in_MySql
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=131548&page=16
흠흠

my.cnf에서
[mysqld] 섹션에서
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
init_connect=SET character_set_database = utf8
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
이런 옵션을 완전히 붙여준다.

+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | utf8                                   |
| character_set_connection | utf8                                   |
| character_set_database   | utf8                                   |
| character_set_filesystem | binary                                 |
| character_set_results    | utf8                                   |
| character_set_server     | utf8                                   |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+

그래도 안 된다 -_-;;

하지만...
php파일을 utf-8로 인코딩 시켜서 저장하고,
PHP에서 database에 connect한 직후에
mysql_query("SET NAMES 'utf8'");
라고 쿼리를 날림으로써 해결할 수 있었다.