Egloos | Log-in


APM에서 UTF-8 환경 구축하기 (for Windows)

오늘 RSS를 테터의 DB로 저장하는 작업을 하다가 UTF-8 때문에 엄청난 삽질을 했습니다(...)

문제는 PHP로 RSS의 데이터를 DB의 테터 테이블로 직접 저장하면, 테터에서 깨져보이는 현상이었습니다. 저는 분명히 Apach, PHP, MySQL에서 문자셋을 전부 utf-8을 셋팅했습니다(!) 그러나 경험부족에서 오는 무지함 때문에 미처 생각치 못했던 부분...

바로 PHP에서 MySQL로 커넥션할 때, "set names utf-8"을 먼저 쿼리로 날려주지 않으면, MySQL 함수로 DB에 저장해봤자 UTF-8로 저장되지 않는다는 사실이었습니다. 결국 딱 한문장 추가해서 문제를 해결했습니다.

그런데 더 어이없는 건, 비록 엉터리로 DB에 저장을 해도, 그걸 그대로 가져와서 IE에다 뿌리면 제대로 잘 나옵니다!! IE에서는 문자열의 패턴을 통해서 인코딩 방식을 알아서 해석하기 때문이죠... 그런데 오히려 그 때문에 저는 "테터가 문제있는거 아냐?" 하고 괜한 의심을 하게되서 왠종일 헛삽질을 한 계기가 되고 말았습니다(...)

그래서 오늘 일을 교훈삼아서, 다시는 실수하지 않도록 기록을 남겨봅니다.


Apache (v2.2.2 기준)
httpd.conf 에서 다음을 추가/수정 한다.

AddDefaultCharset UTF-8

PHP (v5.1.4 기준)
php.ini 에서 다음을 추가/수정 한다.

default_charset = "UTF-8"

MySQL (v5.0 기준)
my.ini 에서 다음을 추가/수정 한다.

[client]
default-character-set=utf8

[mysql]
;default-character-set=latin1 // 주석 처리
default-character-set=utf8

[mysqld]
;default-character-set=latin1 // 주석 처리
default-character-set=utf8

init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
character-set-server=utf8
collation-server=utf8_general_ci

그리고, Apache, MySQL 서버를 Restart 시킨다.



PHP 소스에서...
DB에 연결한 후에 "set names utf-8"을 쿼리로 날린다.

MySQLi 확장라이브러리를 사용한다면 이렇게 하면 된다.

$db = new mysqli('Host', 'User', 'Password', 'DatabaseName');
$db->query("set names utf8");


추가 사항
PHP, HTML, TXT 파일등, 하여간 모든 파일을 UTF-8로 인코딩해서 저장할 것.
그래야 파일 내에 한글이 섞여있을때 문제가 발생하지않는다.

그리고 당연히 DB를 생성할 때도 문자셋을 UTF-8로 정의해야 한다.
MySQL 콘솔에서는 이렇게 하면 된다.

mysql>CREATE DATABASE DatabaseName DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

by 시즈하 | 2006/07/14 19:17 | Know-out | 트랙백 | 덧글(4)

트랙백 주소 : http://Sizuha.egloos.com/tb/2562136
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 냐모 at 2006/07/14 19:23
IE의 놀라운 유연함때문에 많이들 고생을 하죠. 간단한 문법 틀리는것도 에러로 안잡아주고 그냥 넘어가주다보니 나중에 더 고생하는거 같더라구요 :)
Commented by 百鬼夜行_改 at 2006/07/14 19:39
저도 개인적인 목적으로 수집기 하나를 만들고 있었는데(취미레벨;) 이 글을 미리 봤더라면 괜한 고생 덜했을 듯 하네용. ; (사실은 시즈하님이 말씀하시는 방법이 어떤것인지 정확히 이해도 못하는 수준) 제 경우 일본어같은 외국어와 euc-kr나 utf-8같은 처리를 못해서 대충 엉터리로 저장하고 그냥 불러올 때 무식하게 일일이 다 iconv() 라던가 md_string으로 변환하는 방법을 썼답니다.;
Commented by kykisk at 2006/07/14 19:45
언어문제는 언제나 골치죠...;;
최근 회사에서 솔라리스+제우스+오라클 환경쪽 세팅때문에 고생좀했...
결국 다른문제였지만...OTL...
Commented by 시즈하 at 2006/07/14 19:58
앞으로는 FireFox에서 확인해 봐야겠습니다^^; >> 냐모 님

RSS에서는 역시 문자 인코딩이 가장 골치아픈것 같습니다. 저는 일단 UTF-8로된 RSS만을 대상으로해서 작업하고 있고, 나중에 변환 코드를 통해서 euc-kr도 지원할 예정입니다. 일단 다국어를 표현하려면 DB와 웹사이트를 UTF-8로 통일하는게 좋습니다. 그러자면 조금 여러가질 셋팅해야하긴 하지만 한번 셋팅해 놓으면 나중에 고생을 덜합니다^^; >> 百鬼夜行_改 님

네, 정말 골치네요. 저는 오늘 MySQL에게 한방 얻어맞은 기분입니다...^^; >> kykisk 님

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶