테스트 사이트 - 개발 중인 베타 버전입니다

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

· 19년 전 · 32749 · 38
utf-8.jpg
아래 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 을

사용하시면 됩니다....

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 38개

18년 전
charset=UTF-8 관련
UTF-8
db인코딩을 utf8로 하고 create euckr를 utf8로 하고

commond파일 수정 오케이~
17년 전
그누보드가 업데이트되어도 위3개 파일 덮어쓰면....
그럼 업데이트가 아니잖아요...-_-;;

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

이문제로 요즘 고민이 많은데 많은 도움됬읍니다.

게시글 목록

번호 제목
2771
2767
2763
2762
2758
2752
2751
2736
2728
2718
2707
2703
2679
2675
2664
2663
2647
2639
2615
2608