utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8로... 정보
utf-8 사용시 설정 - db의 입출력을 완벽하게 utf-8로...본문
이런저런 삽질 끝에 얻어낸 결론 입니다...
일단 모든 환경과 실제 주고 받는 데이터를 모두 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형식으로 입출력을 하고 있습니다.
문제가 있다면 코멘트 부탁 합니다...
일단 모든 환경과 실제 주고 받는 데이터를 모두 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형식으로 입출력을 하고 있습니다.
문제가 있다면 코멘트 부탁 합니다...
추천
1
1
댓글 15개
기존에 데이터가 있는 경우에 수정을 하시면 실제 데이터들은 utf-8의 형식이 아니므로 이전에 저장된 데이터들은 모두 깨져 보입니다.... 그러나 실제로 데이터 자체가 깨지는 것이 아니라 단지 db서버와의 입출력에 실제 utf-8을 사용하는 것이므로 이전의 데이터는 utf-8이 아니기 때문에 깨져 보이는 겁니다... 이 상태에서 수정을 해 버리면 데이터는 복구되지 않습니다.... 그러니.. 반드시 초기 설치시에 수정을 하시기 바랍니다....
1차적인 문제....
일단 다른 부분에서는 별 문제가 없는데 관리자화면의 기본환경설정에서 체크박스에 체크를 하고 저장을 해도 체크박스의 값이 넘어가지 않습니다... 이건... 사실 별 상관이 없는듯 한데... 일단은 수정 한 후에 생긴 문제라서 기록해 둡니다...
일단 다른 부분에서는 별 문제가 없는데 관리자화면의 기본환경설정에서 체크박스에 체크를 하고 저장을 해도 체크박스의 값이 넘어가지 않습니다... 이건... 사실 별 상관이 없는듯 한데... 일단은 수정 한 후에 생긴 문제라서 기록해 둡니다...
이건 개인적인 문제였습니다... -_-;;; 이 문제는 위 수정과 전혀 관계 없습니다...

아..그래서 코멘트가 달리면 게시자에게 메일보내기..아무리 체크를 해도 소용이없었군요. 휴~ 아직도 해결은 못했지만 적어도 내가 뭘 잘못건드려서 그런게 아니란건 알았네요. 얼마나 오랫동안 붙잡고있었는지 ㅠㅠ 그럼 코멘트 알림 메일은 포기해야되는건가요? OTL
체크박스의 값이 안넘어가는건 utf-8 부분의 수정과는 상관이 없습니다.. 윈도우 기반의 서버환경에서만 나타나는 문제인듯 한데.... 체크박스의 value가 1, 즉 체크되어 넘어가는 경우는 문제가 없지만, 체크 해제되면 0이 넘어가는게 아니라 그냥 NULL 값이 넘어가서 db에 입력시 발생하는 문제인듯 합니다. mysql 5 이상의 버전에서는 이 부분이 모두 오류가 나네요... 일단 임시 방편으로 체크박스에서 넘어온 값이 1이 아닌 null일 경우 값을 0으로 설정하도록 했습니다만... 테이블의 생성 문제인지, php나 mysql의 버전 문제인지는 아직 모르겠습니다.

친절한 답변 감사드립니다.

팁 .. 감사합니다...
일단 시도를 해봐야겠네요....^^
일단 시도를 해봐야겠네요....^^

php 5.1.2
mysql 5.0.18
apache 2.0.55
모든 설정은 utf8 (한글버전도 사용하므로 http.cnf 에만 euckr 한줄 추가)
즉, 모든 설정은 utf8이며 웹에서 보여주는것만 euckr 입니다..
위의 환경에서 테스트 해보았습니다.
본문에 제시하신 방법으로 새로 설치해보니
설치 직후 phpmyadmin 에서 설치시 입력된 한글깨짐은 그대로이고,
보드에서는 초기설치시 입력되는 한글 부분이 모두 깨져버리는군요 ... ^^
phpmyadmin에서 깨져버린 한글을 새로 한글로 직접 입력하면,
phpmyadmin에서도 한글로 출력되고, 보드에서도 한글로 출력되는군요
이후에 보드에서 한글로 입력한 부분들은
phpmyadmin에서도 한글로 출력되고, 보드에서도 한글로 정상적으로 출력되는군요
제시하신 팁이 거의 확실한 해결책인것 같습니다...
좋은 팁 감사합니다.....
이제 설치시 초기입력되는 한글깨짐을 해결하면 되겠군요...^^
mysql 5.0.18
apache 2.0.55
모든 설정은 utf8 (한글버전도 사용하므로 http.cnf 에만 euckr 한줄 추가)
즉, 모든 설정은 utf8이며 웹에서 보여주는것만 euckr 입니다..
위의 환경에서 테스트 해보았습니다.
본문에 제시하신 방법으로 새로 설치해보니
설치 직후 phpmyadmin 에서 설치시 입력된 한글깨짐은 그대로이고,
보드에서는 초기설치시 입력되는 한글 부분이 모두 깨져버리는군요 ... ^^
phpmyadmin에서 깨져버린 한글을 새로 한글로 직접 입력하면,
phpmyadmin에서도 한글로 출력되고, 보드에서도 한글로 출력되는군요
이후에 보드에서 한글로 입력한 부분들은
phpmyadmin에서도 한글로 출력되고, 보드에서도 한글로 정상적으로 출력되는군요
제시하신 팁이 거의 확실한 해결책인것 같습니다...
좋은 팁 감사합니다.....
이제 설치시 초기입력되는 한글깨짐을 해결하면 되겠군요...^^
설치시 초기입력되는 한글깨짐은 install 디렉토리에서 별도로 db에 접속을 하기 때문에 그런 것 입니다. 따라서 install 과정 중에 db에 접근하는 부분의 소스에서 db에 접속한 후에 @mysql_query("set names utf8");으로 쿼리를 실행한 후에 데이터를 전송하시면 깨지는 일은 없을겁니다.

install/install_db.php 파일에
@mysql_query("set names utf8");
을 추가...
테스트를위하여 디비를 삭제하고 새로 설치해봤더니..
아주 잘 됩니다....^^
감사합니다...
@mysql_query("set names utf8");
을 추가...
테스트를위하여 디비를 삭제하고 새로 설치해봤더니..
아주 잘 됩니다....^^
감사합니다...
해결 되셨다니 다행 입니다. 이제 모든 데이터를 실제 utf-8로 처리를 하게되었으니 내부에서의 몇몇 부분의 처리만 하면 거의 완벽한 utf-8의 구현이 가능 하겠군요.

바로 위에 디비연결부분에도 넣어주셔야 합니다...
안그러면 109라인에서 쿠키에러를 보시게 됩니다....^^
안그러면 109라인에서 쿠키에러를 보시게 됩니다....^^

잘됩니다. 감사합니다
한번 도전하겠습니다
감사합니다.
감사합니다.
정말 감사합니다 덕분에 앞으로 3일더 고생해야할걸 풀었습니다 어저께 이것때문에 한숨도 못잣습니다