강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8
작성자 : 13 김영철
등록날짜 : 2009.01.14 22:03
2,002
이런저런 삽질 끝에 얻어낸 결론 입니다...

일단 모든 환경과 실제 주고 받는 데이터를 모두 utf-8로 하기 위한 방법 입니다.

이 방법은

php 5.1.2 
mysql 5.0.18 
apache 2.0.53

의 환경에서 테스트 되었습니다.

일단 문제점은,

1. utf-8 버전을 받아 사용해도 실제 데이터는 utf-8로 저장되지 않으므로 서버의 환경이 utf-8이라도 db에 입력되되는 데이터는 utf-8의 형식이 아니다..

2. 1번의 문제로 phpmyadmin등에서 데이터가 깨져 보인다.

3. 데이터 입력시 utf-8로 변환을 해도 출력시 db에서 꺼내올 때 데이터를 기본 형식으로 처리해서 데이터가 깨진다. - 물론 영어는 안깨진다.


이 세 가지 문제점을 해결하기 위한 수정 입니다.

그누보드 디렉토리/lib/common.lib.php 파일에서,

// DB 선택
function sql_select_db($db, $connect)
{
    return @mysql_select_db($db, $connect);
}

이 부분을 아래와 같이 수정 합니다.

// DB 선택
function sql_select_db($db, $connect)
{
    @mysql_query("set names utf8");
    return @mysql_select_db($db, $connect);
}

이렇게 하면,

db접속 후에 모든 데이터의 처리를 utf-8로 합니다. 주의할 점은 mysql 버전이 5 이상의 경우 utf-8이 아니라 utf8 입니다. 이렇게 하고 데이터를 불러오거나 저장을 하면 db에도 실제로 utf-8현식으로 저장이 됩니다.

주의하실 점은 이미 기존의 데이터가 있는 상황에서 @mysql_query("set names utf8");을 적용하면 기존의 쌓인 데이터는 실제 utf-8이 아니므로 출력 부분에서도 깨져 보입니다. 따라서 초기 세팅시에 위 부분을 수정하시고 인스톨을 진행하면 모든 부분에서 utf-8로의 입출력이 가능 합니다.

또한, mysql 5 이상의 환경에서 인스톨시 보다 안전하게 인스톨을 위해서는 인스톨 디렉토리의 sql_gnuboard4.sql 파일을 열어서 각 테이블 생성 DDL의 마지막에,

 type=MyISAM;

이 부분을

 ENGINE=MyISAM DEFAULT CHARSET=utf8;

이렇게 해 주시면 테이블 또한 확실하게 utf-8형식으로 생성이 됩니다.

인스톨 하기 전에 이러한 수정을 하고난 후에 설치를 하면 완벽하게 utf-8형식으로 데이터를 입출력 할 수 있습니다.

db 접속하는 부분이 위 수정 파일 말고 또 어느 부분에 있는지는 아직 제가 다 파악을 못했습니다만, 대부분의 db접속후에 실제 쿼리를 사용하기 전에 먼저 set names utf8 을 쿼리로 날려 주시면 db는 모든 데이터의 입출력을 utf-8형식으로 처리 합니다.


여담..

mysql 5 부터 utf-8 이 아니라 utf8로 바뀌었습니다. euc-kr도 euckr로 바뀌었구요... 따라서 db 환경이나 db 테이블 생성 같은 경우에는 utf8이나 euckr을 써야 하고 php나 apache에서는 그대로 utf-8이나 euc-kr로 써야 합니다... 서버 구축시 의외로 이 부분에서 많은 분들이 실수를 하시더군요...

일단 이렇게 해서 저는 완전하게 utf-8형식으로 입출력을 하고 있습니다.

출처 : Tong - 드렁크수달스님의 ■ PHP ■통

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3015 APM에서 utf-8 구현 방법 13 김영철 01.14 2587
열람중 utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8 13 김영철 01.14 2003
3013 PHP로 작동하는 RSS 읽는 함수 13 김영철 01.14 2078
3012 EditPlus V2.30 되면서 눈에띄는 달라진점 7가지 13 김영철 01.14 2350
3011 오라클 캐릭터 셋 변경 M 최고의하루 01.12 3460
3010 체크박스 배열을 edit 수정페이지로 불러오기 M 최고의하루 01.12 3800
3009 config 배열. 99 단국강토 01.08 2516
3008 Rewrite 99 단국강토 01.08 3111
3007 특정폴더에서 파일을 이미지파일을 들고와서 선택시..이미지 변환 99 단국강토 01.07 3060
3006 book_shop 99 단국강토 01.07 2945
3005 Sub와 Function 차이점 99 단국강토 01.06 1886
3004 PUTTY Telnet , SSH 접속 프로그램 99 단국강토 01.06 3754
3003 VBScript 온라인 도움말 Ver 5.5 99 단국강토 01.05 3004
3002 스마택 Ver 0.2 ( 소스 자동 정렬 프로그램 ) 99 단국강토 01.05 2203
3001 # 제목을 입력하는 곳 (넓은 사이즈) M 최고의하루 01.03 2166
3000 Editplus v3.0 (문서 편집기) M 최고의하루 01.03 3074
2999 [ JSP ] 브라우저 인코딩이 자동으로 한글이 안되는 경우 해결법 99 단국강토 01.02 2860
2998 [ JS ] 버튼을 이용한 이미지 넘기기 ( 이미지 리스트 ) 99 단국강토 01.02 2877
2997 [AJAX] 자바스크립트에서 XML 파일 읽어 오기 99 단국강토 12.30 3155
2996 [AJAX] DOMDocument 에서 selectSingleNode 을 이용한 XML 노드 (Node) 찾기 99 단국강토 12.30 2988
2995 [ JS , AJAX ] DOM 크로스브라우징 : 원하는 노드 찾기 [ createDocument , DOMDocument ] M 최고의하루 12.26 2487
2994 외부링크 금지하는 방법 M 최고의하루 12.26 2139
2993 오늘 하루 창 열지 않기 M 최고의하루 12.24 3302
2992 DLL화일 레지스트리에 등록 또는 삭제 하기 M 최고의하루 12.24 3306
2991 팝업창 닫고 프레임이 있는 부모창에서 원하는 페이지로 이동하기 M 최고의하루 12.23 2913
2990 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-2 M 최고의하루 12.23 2103
2989 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 3978
2988 [펌] 제12강 - 방명록 만들기 I M 최고의하루 12.23 5324
2987 [펌] 제13강 - 방명록 만들기 II M 최고의하루 12.20 2384
2986 [펌] 제14강 - 방명록 만들기 III M 최고의하루 12.20 2497
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취