티스토리 뷰


간혹 웹 서버, 혹은 DB 서버 구축시 PHP랑 MySQL의 인코딩 문제 때문에 귀찮을 때가 있다. 분명 둘 다 UTF-8 (유니코드)로 설정을 잘한 것 같은데, 한글 인코딩 문제가 발생하기 때문이다. 예를 들어 분명 웹에서는 잘 나타나는데 실제 DB를 확인해보면 깨진 한글이 입력되어 있거나 그렇다.

이를 해결하기 위해 2가지 정도의 방법이 있다.


1. PHP에서 DB접속시 강제 인코딩 설정

이 방법은 DB Connection을 하는 각 페이지 마다 강제 인코딩 설정을 해주는 방법이다. PHP 파일에서 DB 연결하고 다음 쿼리를 날려주면 된다.

set names utf8;

위 방법으로 안된다면 추가로 다음 쿼리도 날려줘보자.

set session character_set_connection=utf8;

set session character_set_results=utf8;

set session character_set_client=utf8;

이 정도 하면 대부분의 PHP, MySQL간 한글 인코딩 문제가 해결된다.



2. 서버의 /etc/my.cnf 수정

그런데 DB 연결 때 마다 위 쿼리를 전송하는 것은 사실 DB를 관리하는 입장에서는 좀 부담이 있다. /etc/my.cnf 에 다음 구문을 추가 한뒤 mysqld 를 재시작 한다.


[mysqld]

collation-server=utf8_unicode_ci

default-character-set=utf8

character-set-server=utf8

init_connect=set collation_connection=utf8_unicode_ci

init_connect=set names utf8

# mysql 5.5 버전 이상에서는 collation-server와 default-character-set은 추가하지 마세요. 버전업 되면서 파라미터가 변경되어 추가하면 mysql 서비스가 실행이 안됩니다.


[client]

default-character-set=utf8


[mysql]

default-character-set=utf8


PHP, MySQL 한글 사용시 이정도는 초기에 설정해 놓는 편이 좋을 듯하다.


(2016.05.24 추가) 그래도 안될 시 확인할 사항

테이블의 collate 설정을 확인해보세요. 데이터베이스의 테이블 콜렉션 설정이 utf8로 되지 않은 상태에서 테이블 생성시 다른 콜렉션으로 설정되었을 수 있습니다.


저작자 표시 비영리 변경 금지
신고
프로필사진

Yowu (Yu Yongwoo)

My MBTI type is ENTP. (Of course I do not believe it 100%, but I want to do that) I use Node.js to develop the backend. I use Ubuntu Linux as my development environment, and I love Vim. I am interested in open source and are keen to contribute. I have a bachelor's degree in computer science from Catholic University and now a software engineer at Plating Inc., I spent about 5 years developing and learning, and I am still interested in software development and culture. Recently, I am interested in React, Serverless structure, Domain Design Driven. Sometimes I play drums in the band.