티스토리 뷰

반응형


간혹 웹 서버, 혹은 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)

흔한 Node.js/Java 백엔드 개발자입니다
Ubuntu와 MacOS 데스크탑 개발 환경을 선호합니다
최근에는 vscode와 IntelliJ를 사용하고 있습니다
vscode에는 neovim, IntelliJ는 ideaVim
개발용 키보드는 역시 HHKB Pro 2 무각입니다
락 밴드에서 드럼을 쳤습니다

최근에 올라온 글
최근에 달린 댓글
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
Total
Today
Yesterday