utf8 mysql정리 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

utf8 mysql정리 정보

질문 utf8 mysql정리

본문

드디어 utf8세팅에 성공했네요, ㅎ

win xp sp2 , apache 2.0.54, php 4.3.11, mysql 4.1.12에서

아래와 같이 세팅

1. mysql

[mysqld]
port = 3306
socket = mysql
skip-locking
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

2. php
default_charset ="utf-8"

3. httpd.conf
DefaultLanguage ko
AddDefaultCharset UTF-8

4. web
utf-8
이렇게 세팅해야 utf8이 제대로 세팅이 되었다는군요.

* 참고로 windows는 c:\my.cnf를 두는게 젤 났습니더 ㅠㅠ(이거 땜시...)

5. 쥐4는 위버에서 파일 하나씩 캐릭셑을 변경해 줬습니다. (203개인지, 몇갠지는 모르지만)
-수정 -> 페이지속성 -> 제목/인코딩 -> utf-8
다른 이름으로 저장


6. 제로보드는 4.0대에서 4.1대로 변경
http://dev.mysql.com/doc/mysql/en/charset-conversion.html  를 참조하여 수정

<?php
/* $Id: mysqlupgrade.php,v 1.3 2005/01/31 22:04:02 shimon Exp $ */
// upgrade CHARACTER SET for MySQL 4.1.0 +
//
// Did you export all databases including mysql database before runing this file ?
//
// known bug of this program it dont know to treat FULLTEXT index
//
//by Shimon Doodkin *** 개인정보보호를 위한 이메일주소 노출방지 ***

$conn = mysql_connect("localhost", "mashovim.co.il", "***");
$printonly=true; //change this to false to alter on the fly
$charset="hebrew";
$collate="hebrew_general_ci";
$altertablecharset=true;
$alterdatabasecharser=true;

function PMA_getDbCollation($db)
{
$sq='SHOW CREATE DATABASE `'.$db.'`;';
$res = mysql_query($sq);
if(!$res) echo "\n\n".$sq."\n".mysql_error()."\n\n"; else
if($row = mysql_fetch_assoc($res))
{
  $tokenized = explode(' ', $row[1]);
  unset($row, $res, $sql_query);
  for ($i = 1; $i + 3 < count($tokenized); $i++)
  {
  if ($tokenized[$i] == 'DEFAULT' && $tokenized[$i + 1] == 'CHARACTER' && $tokenized[$i + 2] == 'SET')
  {
    if (isset($tokenized[$i + 5]) && $tokenized[$i + 4] == 'COLLATE')
    {
    return array($tokenized [$i + 3],$tokenized[$i + 5]); // We found the collation!
    }
    else
    {
    return array($tokenized [$i + 3]);
    }
  }
  }
}
return '';
}

?>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1251<? //remember to change it if needed ?>" />
<xmp>
<?

$rs2 = mysql_query("SHOW DATABASES");
if(!$rs2) echo "\n\n".$sq."\n".mysql_error()."\n\n"; else
while ($data2 = mysql_fetch_row($rs2))
{
$db=$data2[0];
$db_cha=PMA_getDbCollation($db);
if ( $db!='mysql' /* &&( $db=='mydb_x' || $db=='mydb_y' ) */ ) // limit to database(s) - $db=='mydb_x' || $db=='mydb_y' || $db=='mydb_z'
if ( substr($db_cha[0],0,4)!='utf8' ) // limit to charset
{
mysql_select_db($db);
$rs = mysql_query("SHOW TABLES");
if(!$rs) echo "\n\n".$sq."\n".mysql_error()."\n\n"; else
while ($data = mysql_fetch_row($rs))
{
$rs1 = mysql_query("show FULL columns from $data[0]");
if(!$rs1) echo "\n\n".$sq."\n".mysql_error()."\n\n"; else
while ($data1 = mysql_fetch_assoc($rs1))
{
  if(in_array(array_shift(split("\\(",$data1['Type'],2)),array(
//'national char',
//'nchar',
//'national varchar',
//'nvarchar',
'char',
'varchar',
'tinytext',
'text',
'mediumtext',
'longtext',
'enum',
'set'
  )))
  {
  if(substr($data1['Collation'],0,4)!='utf8') // limit to charset
  {
    $sq="ALTER TABLE `$data[0]` CHANGE `".$data1['Field'].'` `'.$data1['Field'].'` '.$data1['Type'].' CHARACTER SET binary '.($data1['Default']==''?'':($data1['Default']=='NULL'?' DEFAULT NULL':' DEFAULT \''.mysql_escape_string($data1['Default']).'\'')).($data1['Null']=='YES'?' NULL ':' NOT NULL').';';
    if(!$printonly&&!mysql_query($sq)) echo "\n\n".$sq."\n".mysql_error()."\n\n";
    else
    {
    echo ($sq."\n") ;
    $sq="ALTER TABLE `$data[0]` CHANGE `".$data1['Field'].'` `'.$data1['Field'].'` '.$data1['Type']." CHARACTER SET $charset ".($collate==''?'':"COLLATE $collate").($data1['Default']==''?'':($data1['Default']=='NULL'?' DEFAULT NULL':' DEFAULT \''.mysql_escape_string($data1['Default']).'\'')).($data1['Null']=='YES'?' NULL ':' NOT NULL').($data1['Comment']==''?'':' COMMENT \''.mysql_escape_string($data1['Comment']).'\'').';';
    if(!$printonly&&!mysql_query($sq)) echo "\n\n".$sq."\n".mysql_error()."\n\n";
    else echo ($sq."\n") ;
    }
  }
  }
}
if($altertablecharset)
{
  /*
  $sq='ALTER TABLE `'.$data[0]."` DEFAULT CHARACTER SET binary";
  echo ($sq."\n") ;
  if(!mysql_query($sq)) echo "\n\n".$sq."\n".mysql_error()."\n\n";
  */
  $sq='ALTER TABLE `'.$data[0]."` DEFAULT CHARACTER SET $charset ".($collate==''?'':"COLLATE $collate");
  echo ($sq."\n") ;
    if(!$printonly)
  if(!mysql_query($sq)) echo "\n\n".$sq."\n".mysql_error()."\n\n";
}
}
if($alterdatabasecharser)
{
  /*
  $sq='ALTER DATABASE `'.$data2[0]."` DEFAULT CHARACTER SET binary";
  echo ($sq."\n") ;
  if(!mysql_query($sq)) echo "\n\n".$sq."\n".mysql_error()."\n\n";
  */
  $sq='ALTER DATABASE `'.$data2[0]."` DEFAULT CHARACTER SET $charset ".($collate==''?'':"COLLATE $collate");
  echo ($sq."\n") ;
    if(!$printonly)
  if(!mysql_query($sq)) echo "\n\n".$sq."\n".mysql_error()."\n\n";
}
}
}
?>
이를 실행하여 제로보드d의 db를 4.1대의 utf8로 업그레이드.


7. 자료실의 zb2gnu3.php, 기타 zb2gun3.php, zb2gnu3_mb.php, zb2gnu3_point.php를 사용하여 업.
 * 다른 포인트는 db에서 직접 카피

8. g4/convert로 g4로 업그레이드

한글utf g4설치 완료.

저같은 쵸뵤분들을 위해 gnuboard4-05.06.06-utf8-org를 올려 놓겠습니다.
업데이트되는 파일들은 각자가 드림위버로 작업하시고, 좋은 팁들이 있으시면 가르쳐 주시면 고맙겠습니다.
phpmyadmin은 뺏으니 알아서 넣으시면 될겁니다.

댓글 전체

글쎄요...;;
그누보드는 일일이 파일 하나하나 바꿔줘야 할듯..;
LANGPACK 처럼 되있으면.. 그저 한글이 들어있는 언어팩 부분만 바꿔주면 될터인데.. 아직 그렇게 안되있는듯 해서..
한글이 들어있는 파일이라면 모드 인코딩을 변환 저장해줘야...
한글이 데이터는 나와도..  그누보드의 한글은 깨져서 나올겁니다..; 예를 들어..; 자바스크립트의 한글 이라든지..
파일 인코딩을 변환해 주는 툴을 찾아보시는게 빠를듯..
바라미 님..안녕하십니까?그누보드 인코딩을 utf-8로 바꾼다고 하셨는데 간단하게 바꾸는 방법이 없을가요?
에디트 프로그램으로 매 하나의 파일을 모두 변환 저장하기보다....좀 더 간단한 방법???
....?? 무슨 소리인지는 모르겠지만...; 제 경험을 말씀드릴게요..;
mysql 4.1 부터인가 4.0 부터인가..; 문자셋을 utf-8로 사용하더군요.
그래서 내부에 저장 되는 문자영로 모두 utf-8로 저장됩니다.
그상태에서 그누보드를 설치하고 테스트 했었는데.
그누보드에서 입출력을 하면 한글이 모두 잘 보입니다. 글을 쓰던 읽던.
그런데 phpmyadmin 에서 보면 글씨가 깨져보이는게 아닙니까. 그게 이유가 무엇인가 하면. 그누보드가 euc-kr 인코딩을 사용합니다. 그래서 그누보드에서 글을 쓰면 euc-kr 인코딩된 문자열을 집어넣게 되지요.
그런데 mysql 은 utf-8을 사용합니다. 그렇다면 결국 ? mysql 에서 문자열을 자동으로 euc-kr -> utf-8 문자열로 변환시켜 주는것도 아니고..
결과는 euc-kr 문자열이 mysql 에는 utf-8 문자열로 인식되어 그대로 들어갑니다.
또한 읽어올때는 데이터를 그대로 빼온 뒤에 그 데이터 문자열을 그누보드에서는 euc-kr로 설정되어 있으니 브라우저에서 euc-kr 인걸로 알고 뿌려주니 제대로 보이는겁니다.
mysql 을 utf-8 사용으로 해준뒤에 그누보드의 캐릭터 셋을 utf-8로 해주세요.
그리고 나서 그누보드 파일들의 인코딩을 utf-8로 변환 저장해 주시녀 될겁니다 :)
바라미 님
질문이요

다른 설명은 이해가 되는데요
-------------------
그누보드의 캐릭터 셋을 utf-8로 해주세요.
그리고 나서 그누보드 파일들의 인코딩을 utf-8로 변환 저장해 주시녀 될겁니다 :)
-------------------
데이터를 가져오고 저장하는 부분을 수정해야 할것 같은데요
이 부분에서 구체적으로 어떻게 그누보드를 수정해야 하는지를 모르겠습니다.
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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