웹모아
웹모아[손님] 검색   로그인    


 
백업/기타
 


utf8 환경으로 자료 conversion 성공기
  2007-03-06 00:16:20 댓글:(0)   조회:544


MySQL환경을 UTF-8로 전환하기

기존 MySQL 환경에서는 Database측 CHARSET 이 latin1 이나 euckr을 많이
사용했을 겁니다.

Legacy DB쪽은 아무 생각없이 CREATE DATABASE ... ; 해버렸었던 경우가
많아서 latin1 으로 되어 있는 database가 저또한 엄청나게 많았습니다.

그런데, 이럴 경우 utf8을 제대로 쓸 수 없다거나, command line utility에서
꼭 문제가 발생하여서 utf8로 전환을 시도했습니다.

문제는 latin1 db에 client 는 utf8을 사용하고 있던 경우,
db에는 utf8로 들어가나, 정상적인 utf8이 아님으로써,
mysql 이나 query browser등에서 쿼리를 할 수 없었습니다.

한번은 잘못해서 database하나를 몽땅 못쓰게 만들어 버린 적도 있었죠.

이곳 게시판을 잘 읽어 본 결과 아래와 같이 하여 성공적으로
conversion을 하였습니다.

**. 준비물
vim 혹은 editplus 등 utf-8을 지원하거나, 변환가능한 editor
test한 MySQL 버젼 아무거나(기존), MySQL 4.1.12 , 5.0.16 (utf-8사용할 것)

A. DB는 latin1으로 만들어져 있고, client는 utf8을 사용하였던 경우

(1). 가장 먼저 mysql로 접속 한 후 use {database}, show variables like 'c%'; 로
확인을 합니다.
아마도 대부분 Database와 character_set_connection 이 latin1으로
되어 있을 겁니다.
(2). 기존 DB를 Dump받습니다.
mysqldump -u{username} -p{password} {dbname} --default-character-set latin1 > {dump}.sql
이때 Dump 받는 SQL은 database의 chracter set이 아니라, client가 실제로 사용한
character set. 즉 이경우에는 utf8로 저장되어 있게 됩니다.
(3). {dump}.sql 을 편집합니다.
3-1. SET NAMES euckr; 으로 되어 있는 놈을 SET NAMES utf8; 로 변경합니다.
3-2. CREATE DATABASE ..... DEFAULT CHARSET=utf8; 으로 되어 있는 놈을
CREATE DATABASE ..... DEFAULT CHARSET=utf8; 로 변경합니다.
vim 사용자라면, command line에서 1,$s/CHARSET=utf8/CHARSET=utf8/g
하면 바꿀 수 있습니다.
이렇게 하므로써, 다시 생성될 TABLE의 CHARSET도 utf8로 맞출 수 있게 됩니다.
(4). MySQL로 로그인 하여 새로 부어줄 DATABASE를 생성합니다.
CREATE DATABASE {utf8-dbname} DEFAULT CHARACTER SET utf8;
(5). dump 한 data를 부어넣습니다.
mysql -u{username} -p{password} {utf8-dbname} < {dump}.sql

B. DB는 latin1으로 만들어져 있고, client는 euckr을 사용하였던 경우
제로보드가 대표적인데, 다음과 같이 합니다.
(1). 가장 먼저 mysql로 접속 한 후 use {database}, show variables like 'c%'; 로
확인을 합니다.
아마도 대부분 Database와 character_set_connection 이 latin1으로
되어 있을 겁니다.
(2). 기존 DB를 Dump받습니다.
mysqldump -u{username} -p{password} {dbname} --default-character-set latin1 > {dump}.sql
이때 Dump 받는 SQL은 database의 chracter set이 아니라, client가 실제로 사용한
character set. 즉 이경우에는 euckr로 저장되어 있게 됩니다.
(3). {dump}.sql 을 편집합니다.
3-1. SET NAMES euckr; 으로 되어 있는 놈을 SET NAMES euckr; 로 변경합니다.
3-2. CREATE DATABASE ..... DEFAULT CHARSET=utf8; 으로 되어 있는 놈을
CREATE DATABASE ..... DEFAULT CHARSET=utf8; 로 변경합니다.
vim 사용자라면, command line에서 1,$s/CHARSET=utf8/CHARSET=utf8/g
하면 바꿀 수 있습니다.
이렇게 하므로써, 다시 생성될 TABLE의 CHARSET도 utf8로 맞출 수 있게 됩니다.
(4). MySQL로 로그인 하여 새로 부어줄 DATABASE를 생성합니다.
CREATE DATABASE {utf8-dbname} DEFAULT CHARACTER SET utf8;
(5). dump 한 data를 부어넣습니다.
mysql -u{username} -p{password} {utf8-dbname} < {dump}.sql

C. 모두 끝난 다음에 절차...
이 게시판에 많이 나와 있는 방법대로 했습니다. 더 좋은방법도 있을 겁니다.
/{mysqld-my.cnf path}/my.cnf
[client]
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

로 바꾸어 줍니다.
/{init script path}/{init script} restart
아마 리눅스 사용자면 /etc/init.d/mysqld restart 일 것이고,
저처럼 NetBSD 사용자이면 /etc/rc.d/mysql restart 일겁니다.

D. client application의 접속단 변경...
Legacy 프로그램때문에 문제가 되는 게 많은데,
제로 보드의 경우 다음과 같이 바꾸어 줍니다.

{Zeroboard installed path}/lib.php 를 열고,
function dbconn() 을 찾습니다.
@mysql_select_db($f[4], $connect) or Error("DB Select 에러가 발생했습니다","");
이라고 되어 있는 부분 (즉, return $connect; 문 바로 앞)에다가 다음과 같이 넣습니다.
@mysql_query("set names euckr;",$connect);

모두 해피하게 사용하실 수 있을 겁니다.

가장 중요한 것은 show variables like 'c%' ; 해서
character_set_client 와 character_set_connection 과 character_set_database의
속성을 잘 파악하여야 한다는 것입니다.

아무쪼록 소중한 DATA 깨먹는 일 없도록 하시기 바라면서 이만 줄이겠습니다.

저의 시행착오가 다른 분들에게 조금이나마 도움이 되길 바랍니다.

이 문서는 여러분 모두의 경험을 바탕으로 정리한 것이기 때문에
써보시고 유익하시다면 많은 분들이 도움을 얻을 수 있게 해주세요.



 댓글 (0)


백업/기타
페이지: 1 / 2   


     XtraBackup을 이용한 MySQL 백업 및 복77
     MySQL DB 백업 및 복구 - mysqldump504
     [MySQL] 리눅스DB를 윈도우DB로 이전(Too425
       [RE] [MySQL] 리눅스DB를 윈도우DB로 이650
     정보통신부 제공 우편번호부 원본파일747
     mysql 원격접속방법707
     가격비교 참고자료(홈마스타)(3) 512
     리눅스에서 PHP 콘솔을 이용한 MySQL DB 백(홈마스타)576
  utf8 환경으로 자료 conversion 성공기(홈마스타)545
     Mysql-4.1.13 의 한글 문제. | 리눅스(홈마스타)456
     MySQL 5.0 euckr 문자세팅(홈마스타)498
     mySql 처리 함수(홈마스타)1281
     mysql의 주요 함수(홈마스타)1102
     MySQL 백업(홈마스타)483
     mysql 과 함께 사용되는 명령어 사용법(홈마스타)462
     mysql의 최대 성능 향상 방법(홈마스타)786
     리눅스에서 PHP 콘솔을 이용한 MySQL DB 백(홈마스타)513
     PHP로 MySQL 백업받기(홈마스타)691
       [RE] PHP로 MySQL 백업받기(홈마스타)494
     ORDER BY 에서 조건걸기(홈마스타)564
     백업과 복구(홈마스타)555
     리눅스 서버에서 홈페이지의 DB를 백업할려면?(홈마스타)562
     MySQL 데이터 백업 및 복구 | Database(홈마스타)(1) 821
       [RE] MySQL 데이터 및 구조의 백업 - 실제(홈마스타)553
     mysql 주기적으로 백업하기(홈마스타)616
     웹서버와 DB서버를 분리해서 운영할려면?(홈마스타)750
     백업받는 스크립트(홈마스타)676
     서브 쿼리 지원되는 MySQL 버젼...(홈마스타)591
     MySQL Dump뜨는 방법 및 복구 방법(홈마스타)620
       [RE] MySQL Dump뜨는 방법 및 복구 방법(홈마스타)808
≪ [1]  [2]   ≫

복수단어 검색은 공백(space)로 구분해 주세요.



 
최근 글
[손님]
85
77
233
377
621
374
416
241
361
3809
914
954
1200
974
4266
 
인기 글
[손님]
4300
  [홈마스타] input 버턴의 모양
6622
9877
  [홈마스타] php 한글체크문제
3273
4520
3660
3445
3555
3358
3374
8288
5525
3083
4428
6236