PHP, MySQL에서 UTF-8 설정하는 방법
Posted at 2013. 5. 9. 10:02 | Posted in 데이타베이스/MariaDB(MySQL)현재 환경은 CentOS 6.4, PHP 5.4.14, MariaDB 5.5.30, Nginx 를 이용중인데, 최근엔 사이트 개발시 거의 utf-8 을 이용하기 때문에 utf-8로 php 를 셋팅해서 사용하려고 하니,
php에서 한글을 출력해 내는 것은 잘 되는데, MariaDB에서 DB 쿼리를 해서 한글을 출력시에는 전부 ?? 로 표시되는 문제가 발생했다.
인터넷상에서 알려진 PHP와 UTF-8의 설정법을 전부 적용해봤는데도 안되었는데, 최종적으로 /etc/my.cnf 에 [mysqld] 항목에서 skip-character-set-client-handshake 를 추가해주니깐 겨우 한글이 출력되기 시작했다. 클라이언트의 설정을 무시하고 서버쪽 설정에 따르도록 한다는 것 같다.
다른 부분을 전부 설정했음에도 저걸 안해주면 안되는 이유가 소스 설치를 했으면 모르겠는데, 내 경우는 yum 을 이용해서 설치했으며, yum 을 이용해서 설치하면 다른곳이 전부 utf8이라도 DB가 접속시 latin을 사용한다는 얘기가 있다. 따라서 꼭 skip-character-set-client-handshake 를 해준다.
이외에 기본적으로 CentOS 6.4에서 PHP와 MariaDB(MySQL)의 utf-8 입출력을 위한 설정을 남겨본다.
물론 기본적으로 php 파일은 utf-8 로 인코딩 되어 있어야 함.
1. DB 생성시 utf8_general_ci 로 생성.
2. /etc/my.cnf 파일 수정
※ 참고로 my.cnf 설정 잘못하면 my.cnf 설정 변경후 서비스 재시작시에 에러나서 실행이 안될수도 있다. 이 경우엔 설정을 하나씩 지우던가 해서 맞지 않는 설정을 제외시킨다.
[client]
default-character-set=utf8
[mysqld]
init_connect="SET collation_connection=utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
[mysql]
default-character-set=utf8
#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
위와같이 my.cnf 를 바꿔준후 서비스를 재시작해주고 mysql 콘솔로 접속해서 show variables like 'c%'; 명령어를 이용해서 정상적으로 db가 utf8로 설정되어 있는지 확인한다.
MariaDB [(none)]> show variables like 'c%';
+--------------------------+----------------------------+
| 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/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | NO_CHAIN |
| concurrent_insert | AUTO |
| connect_timeout | 10 |
+--------------------------+----------------------------+
default_charset = "utf-8"
'데이타베이스 > MariaDB(MySQL)' 카테고리의 다른 글
MariaDB 10.4에서 10.5로 마이그레이션 하는 방법 (CentOS 8) (1) | 2020.11.14 |
---|---|
MariaDB 5.5에서 10.1로 마이그레이션 하는 방법 (1) | 2017.09.18 |
MySQL에서 MariaDB로 업그레이드 하는 방법 - CentOS (0) | 2014.04.07 |
MySQL에서 MariaDB로 마이그레이션후 발생하는 에러 처리 방법 (0) | 2014.04.04 |