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

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

일단 모든 환경과 실제 주고 받는 데이터를 모두 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

번호 제목 글쓴이 날짜 조회
2955 # 제목을 입력하는 곳 (넓은 사이즈) M 최고의하루 01.03 2937
2954 Editplus v3.0 (문서 편집기) M 최고의하루 01.03 2314
2953 [ JSP ] 브라우저 인코딩이 자동으로 한글이 안되는 경우 해결법 99 단국강토 01.02 2760
2952 [ JS ] 버튼을 이용한 이미지 넘기기 ( 이미지 리스트 ) 99 단국강토 01.02 3579
2951 [AJAX] 자바스크립트에서 XML 파일 읽어 오기 99 단국강토 12.30 2412
2950 [AJAX] DOMDocument 에서 selectSingleNode 을 이용한 XML 노드 (Node) 찾기 99 단국강토 12.30 2530
2949 [ JS , AJAX ] DOM 크로스브라우징 : 원하는 노드 찾기 [ createDocument , DOMDocument ] M 최고의하루 12.26 2561
2948 외부링크 금지하는 방법 M 최고의하루 12.26 2508
2947 오늘 하루 창 열지 않기 M 최고의하루 12.24 2428
2946 DLL화일 레지스트리에 등록 또는 삭제 하기 M 최고의하루 12.24 2221
2945 팝업창 닫고 프레임이 있는 부모창에서 원하는 페이지로 이동하기 M 최고의하루 12.23 3194
2944 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-2 M 최고의하루 12.23 2378
2943 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 3075
2942 [펌] 제12강 - 방명록 만들기 I M 최고의하루 12.23 3056
2941 [펌] 제13강 - 방명록 만들기 II M 최고의하루 12.20 2114
2940 [펌] 제14강 - 방명록 만들기 III M 최고의하루 12.20 2506
2939 [펌] 제15강 - 방명록 만들기 IV M 최고의하루 12.19 2214
2938 [펌] 제16강 - 방명록 만들기 V M 최고의하루 12.19 2107
2937 제17강 - 방명록 만들기 VI M 최고의하루 12.18 2937
2936 [펌] 제18강 - 방명록 만들기 VII M 최고의하루 12.04 2563
2935 아작스관련 코드 링크들 M 최고의하루 12.04 2400
2934 UTF-8 기준, 한글을 초성,중성,종성으로 분리하기 13 김영철 01.14 3453
2933 APM에서 utf-8 구현 방법 13 김영철 01.14 2977
열람중 utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8 13 김영철 01.14 2266
2931 PHP로 작동하는 RSS 읽는 함수 13 김영철 01.14 2408
2930 EditPlus V2.30 되면서 눈에띄는 달라진점 7가지 13 김영철 01.14 2858
2929 오라클 캐릭터 셋 변경 M 최고의하루 01.12 3037
2928 체크박스 배열을 edit 수정페이지로 불러오기 M 최고의하루 01.12 2505
2927 config 배열. 99 단국강토 01.08 2310
2926 Rewrite 99 단국강토 01.08 2117
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취