티스토리 뷰
간혹 웹 서버, 혹은 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로 되지 않은 상태에서 테이블 생성시 다른 콜렉션으로 설정되었을 수 있습니다.
'개인공부 > 웹, 데이터베이스' 카테고리의 다른 글
JSON 기초 of 기초 (0) | 2015.07.07 |
---|---|
Database(MySQL) 기초 01 : 콘솔 접속 방법, 기본 명령어 (0) | 2014.07.19 |
PHP MySQL Hash 함수를 사용한 파일관리 - 파일 삭제 (7) | 2014.02.01 |
PHP MySQL Hash 함수를 사용한 파일관리 - 파일 조회, 다운로드 (5) | 2014.02.01 |
PHP MySQL Hash 함수를 사용한 파일관리 - 파일 업로드 (5) | 2014.02.01 |
PHP 에서 ' (싱글쿼터) 와 " (더블쿼터) 차이 (0) | 2014.01.31 |
PHP 문자열 관련 함수 (0) | 2014.01.31 |