utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8로(보완수정) > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8로(보완수정) 정보

utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8로(보완수정)

첨부파일

utf-8.zip (20.4K) 902회 다운로드 2006-02-05 22:34:49

본문

아래 tron 님의 팁을 보완수정 하였습니다..

아래 tron 님의 팁을 적용하고보니 한글의 입출력은 잘 되는데,
common.lib.php 파일의 109번 라인에서 에러를 보이더군요..
그 부분과 설치과정에서의 utf-8 처리문제를 보완수정 한것입니다..


보완수정한 부분을 제외하면 아래 tron 님의 글을 그대로 인용했습니다..... tron님 죄송 ... ^^

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

이 방법은

php 5.1.1
mysql 5.0.18
apache 2.0.55
서버의 모든 환경설정 = utf8

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

일단 문제점은,

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

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

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


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

=========================================================
그누보드 디렉토리/common.php 파일의 10번줄 바로 아래에

    @mysql_query("set names utf8");

이것 한줄 추가해 줍니다..

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

// DB 연결
function sql_connect($host, $user, $pass)
{
    return @mysql_connect($host, $user, $pass);
}


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

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

// DB 연결
function sql_connect($host, $user, $pass)
{
    @mysql_query("set names utf8"); // 한글문제해결을위하여 추가
    return @mysql_connect($host, $user, $pass);
}


// 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형식으로 생성이 됩니다.
저의 경우는 이부분은 안해도 되더군요...^^
---------------------------------------------------------------------------------------------------------------------------------

설치할때 그냥 설치하면 기본으로 입력되는 내용들이 모두 깨지는데,

그누보드폴더/install/install_db.php 파일의 쿼리부분 몇군데에
@mysql_query("set names utf8");
를 넣어주면 설치시에 기본으로 디비에 입력되는 내용들도 모두 한글로 입력이 됩니다.

(첨부파일 참조)

첨부파일을 압축을 풀면 파일이 세개가 나옵니다..

install_db.php 파일은 install 폴더에
common.php 파일은 그누보드폴더에
common.lib.php 파일은 그누보드/lib 폴더에

넣어주시면 위의 수정과정은 하시지 않아도 됩니다..

-----------------------------------------------------------------------------------------------------------------------------------

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

위의 첨부 이미지처럼 phpmyadmin 에서도 한글이 깨짐없이 출력 됩니다..

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로 써야 합니다... 서버 구축시 의외로 이 부분에서 많은 분들이 실수를 하시더군요...

그렇다고 config.php 파일에서
$g4[charset] = "UTF-8";
이부분을 utf8 로 수정하는것은 하지 마세요...
이부분은 아파치에서 담당하니까 서버마다 다를수도 있어요...

UTF-8 이냐, utf-8 이냐, 아니면 utf8 이냐 하는것은,

apache 의 http.conf 에서는 UTF-8 을
php 의 php.ini 에서는 utf-8 을
mysql 의 my.ini 에서는 utf8 을

사용하시면 됩니다....
추천
13

댓글 38개

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARSET=utf-8' at line 6

이런 에러가 납니다~!
mysql의 버전이 4.1 이상이라면 utf-8을 쓰면 신텍스 에러가 납니다... utf8을 써야 합니다... mysql의 설정 부분에 CHARSET을 설정 하시려면 utf-8이아닌 utf8로 하셔야 합니다. euc-kr도 euckr 입니다...
국내 거의 대부분의 호스팅은 euc-kr 입니다.... 제대로 utf-8환경으로 하기에는 아직은 호스팅 서비스가 따라주질 않습니다... 아직 까지는 서버 호스팅을해야 원하는 환경을 구축해서 사용가능 합니다...
카페24에 신청하면 UTF8로 변경해줍니다.
이때 웹에 올린 것은 먼저 백업해서 저장해 두어야 합니다

저같은 경우 신청하고 하루만에 변경시켜주더군요.
귀차니즘에 매료된 초보가 아래와 같이 해봤는데... 저같은 초보의 관점(^^;)에서는 잘(?) 되네요.

Photofly님 설명대로...
common.php, /lib/common.lib.php 위 본문과 같이 수정하고, install_db.php 다운받아 덮어쓰고...
딱 여기까지만... (첨부파일에 다 있는줄 알았으면 안했을... 게으름대마왕... ㅡ.ㅡ;)

ENGINE=MyISAM DEFAULT CHARSET=utf8; 바꾸지 않았구요...

OS : Windows 2003
Apache 2.0.55 : AddDefaultCharset 설정 안함
PHP 5.1.2 : euc-kr
MySQL 5.0.18 : euckr

DB 생성시 collation : utf8_general_ci 로 했구요...

'URL을 항상 UTF-8로 보냄' check/uncheck된 IE에서 '회원가입/글쓰기/파일첨부'만 테스트 해봤습니다. ㅡ.ㅡ;
안깨지고 잘 보이네요... phpmyadmin에서도 잘 보이고...
다만... '일부' alert() 사용한 대화창에서 글자가 깨져보이긴 합니다만... iconv()로 땜질은 되더군요.
(그렇다고 다 찾아서 고칠수도 없는 노릇이고... 그냥 테스트만 해봤습니다... ^^;)

나중에 어느부분에서 어떻게 문제가 와르르 쏟아질지도 모르고...
제가 아직 모르는게 많아서 현재로서는 그냥 euc-kr로 사용하려고 합니다만...
고수분들은 여기서 어떤것들을 더 체크해보시는지요???

그누보드+PHP 다루는게 점점 재미있어져서 큰일이네요... ㅡ.ㅡ;
이상 허접한 테스트기였습니다.
PHP도 default_charset 설정 안해놓으니 대화창 깨지는 문제도 없어졌네요.
다만... 'ㅌ'자는 일부(?) 대화창에서 그래도 깨져서 나옵니다.
이대로 하나의 서버에서 euc-kr 버전과 utf-8 버전을 같이 돌려도 될런지...
내공이 쌓이는족족 이것저것 테스트해보아야 겠습니다. ^^;

얼마전 Photofly 님께서 PHP 5.1.2 사용시 썸네일 생성 문제가 있다라고 하셨을땐,
무슨말인지 몰랐는데... 갤러리스킨 말씀이셨던듯... ㅡ.ㅡ;
저는 그냥 php_gd2.dll만 5.1.1 릴리즈에 들어있는것으로 덮어씌워서 해결했습니다. ㅡ.ㅜ;

고수님들이 계셔서 짧은 시간에 많은것을 배울 수 있는것 같습니다. 감사합니다~ ^^;
모든 설정을 utf-8 로 할경우 하나의 서버에서 euc-kr 버전과 utf-8 버전을 같이 돌려도 되더군요.
다만, euc-kr 버전은 phpmyadmin 에서 한글이 깨지더군요..
저도 그냥 php_gd2.dll만 5.1.1 릴리즈에 들어있는것으로 덮어씌워서 해결하려다가 걍 버전다운 해버렸습니다.

도움이 되셨다니 다행입니다....^^
국내에서 utf-8 사용가능한 호스팅 아이티브릿지가 있습니다.
저두 이번에 일본어 사이트 제작하면서 그쪽으로 바꿨습니다.
좀 놀라운것은 대부분 유명한 호스팅사들이 다 유니코드 디비 지원이 안된다는 점이었습니다...ㅠㅠ
벤처라 좀 불안하긴 하지만..그래도 관리에 이것저것 괜찮은 기능이 있더라구요.
제가 하는 호스팅도 아니니 선전은 아니구요 그냥 정보 알려드립니다.
http://database.sarang.net 에서 알짜초보님의 글을 퍼왔습니다.
php.ini 의 수정도 필요한 것이 아닌지요?

-퍼온 글 ------------------------------------------------------------

종래에는 홈페이지가 자국인들만 이용할 것을 예상하고 제작하므로써 외국인 즉, 비한글 사용자들에 대한 서비스를 미쳐 염두에 두지 못하므로써 한글이 ?????$%^&( 처럼 깨져 보이는 무지함을 보였던 것이 사실입니다.


이제는 홈페이지 제작도 유니코드(UTF-8) 인코딩 방식이 세계적 추세이며 이러한 추세에 맞추어 MySql도 기본언어를 utf8(UTF-8 인코딩) 방식으로 변경하였으므로, 홈페이지를 종래 euc-kr 등 한글로만 표기하던 방식도 UTF-8 인코딩 방식으로 업데이트해야 할 때 입니다. UTF-8 인코딩 방식은 한국어, 일어, 중국어, 태국어, 아랍어 등 만국어 표기가 가능한 방식입니다.

APM에서 UTF-8을 구현하려면 꽤 많은 부분을 수정해야 합니다 .
다음은 APM에서 UTF-8 구현 방법과 소스코드를 첨부합니다.
적용 환경
----------------
OS : WinXP SP2
Apache : httpd-2.0.52-3
PHP : php-5.0.3
MySQL : mysql-4.1.11
----------------

1. apache 환경파일 편집 (httpd.conf)
2. php 환경파일 편집 (php.ini)
3. mysql 환경파일 편집 (my.cnf)
4. apache, mysql 서비스 재시작
5. mysql에서 캐릭터셋 확인 및 디비생성
6. php 소스코드에 mysql_query("set names utf8;"); 함수 추가
7. php 소스에 한글문자열이 있으면 파일저장할때 UTF-8 파일형식으로 저장
8. 웹브라우즈의 보기-인코딩-UTF-8로 선택

1. /etc/httpd/conf/httpd.conf 에서 캐릭터셋 수정
/*------------
AddDefaultCharset UTF-8

2. /etc/php.ini 에서 캐릭터셋 수정
/*------------
;default_charset = "iso-8859-1"
default_charset = "utf-8"

3. /etc/my.cnf 에서 캐릭터셋 수정
/*------------
[client]
#password = your_password
default-character-set=utf8

[mysqld]
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

[mysql]
default-character-set=utf8

4. 환경변수를 모두 수정후 apache 및 mysql 서비스 재시작
/*------------

5. mysql에서 캐릭터셋 확인
/*------------
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 247 to server version: 4.1.10a

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test
Database changed
mysql> show variables like 'c%';
+---------+-----------+
| Variable_name | Value |
+---------+-----------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| concurrent_insert | ON |
| connect_timeout | 5 |
+---------+-----------+
12 rows in set (0.00 sec)

* MySql에서 데이터베이스 생성
mysql>CREATE DATABASE 디비명 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
서버 설정 부분에

1. httpd.conf 에서 기본언어설정안함

# AddDefaultCharset UTF-8

2. php.ini 에서 기본언어설정안함

; default_charset = "iso-8859-1"
; default_charset = "utf-8"

3. my.cnf 에서 캐릭터셋 수정

[client]
#password = your_password
default-character-set=utf8

[mysqld]
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

[mysql]
default-character-set=utf8
==================================================

위 상태에서 아래 두가지 버전모두 운영이 가능합니다.

그누보드4 UTF-8 = 한글 입출력 아무이상없음,
그누보드4 EUC-KR = 한글 정상출력(phpmyadmin 에서만 한글이 깨짐),

==================================================

httpd.conf 에서
AddDefaultCharset UTF-8 로 지정할경우는

EUC-KR 버전은 한글 깨지는데 브라우저에서 인코딩을 지정하면 정상출력,
새로고침하면 다시 한글깨짐. 이렇게 되더군요...

참고하시라고 올려드립니다..
우선 좋은 팁 감사합니다.

저는 외국에 있는 서버에 호스팅을 받고 있는데..

요즘 외국 서버들은 거의 대부분 UTF-8만 지원하나봐요..
몇군대 알아봤는데 그렇더라고요..

이번에 서버 옮기면서 엄청 고생했습니다. --;;

저 같은 경우는 Table을 생성할때 꼭 ENGINE=MyISAM DEFAULT CHARSET=utf8;을 사용하여 생성하여야 합니다.
그누보드4 UTF 버젼에서

install/sql_gnuboard4.sql 외 한군데 더 고쳐줘야 하더군요..
admin/sql_write.sql 입니다

sql_write.sql에서 type=MyISAM; 이 부분을  ENGINE=MyISAM DEFAULT CHARSET=utf8; 으로 바꿔줘야..
새로운 게시판 생성 할 때 제대로 된 Collation으로 생성이 되더군요.

한참 해맸는데.. 언제나 그렇듯 너무 간단한 한줄로 해결이 되요.. --;;
marob 님 좋은 정보 감사합니다..^^

서버의 환경에 따라서 좀 다른가봐요...저는 sql 파일은 건드리지 않아도 잘되거든요...^^

=========================================================

UTF-8 환경의 서버에 그누보드4 EUC-kR 버전을 설치하실때는

위 본문글 내용에서

    @mysql_query("set names utf8");

이 소스를

    @mysql_query("set names euckr");

로 바꿔서 본문에 제시한 부분들에 넣어주고 설치하면
그누보드4 EUC-kR 버전도 역시 한글의 입출력이
phpmyadmin 에서도 그누보드에서도 이상없이 이루어지더군요...

참고하시라고 추가로 올려 드립니다....
그누보드가 업데이트되어도 위3개 파일 덮어쓰면....
그럼 업데이트가 아니잖아요...-_-;;

수정안하고도 되는
제대로 된버전 안나오나....
너무 중요하고 소중한 팁입니다.
그누보드 제작 팀에서 적극 수렴하시고, 더 발전시켜서 완벽한 UTF-8 버전의
그누보드 개발 및 발표를 해주시면 좋겠습니다.
너무 소중한 팁 고맙습니다.
덕분에 윈도우XP=>우분투로 &
MySQL client version: 5.0.27=> MySQL client version: 5.0.51a로 이전 시키는데 잘 적용 하였습니다.
전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT