일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- USB 레지스트리
- php
- Windows 7
- 이클립스
- 파블애드
- 한메일 smtp
- 삼성 메모리
- 이클립스 플러그인
- XP 설치
- 윈도우 7
- HP
- 파워블로그
- PDA
- 오좀니아
- Ajax
- IE8
- Live Mesh
- jQuery
- 오즈 옴니아
- 한메일
- 이클립스 설정
- DDos 전용 백신
- IE 8
- VMwareTools
- Internet Explorer 8
- ddos
- HP 신제품
- 옴니아2
- 한메일 pop
- VMware
- Today
- Total
엉망진창
utf-8 로 이전하기 본문
출처 : PHPSCHOOL
utf-8 로 이전하기.
1. MySQL
-- 5.x --
- euckr 스키마 백업
mysqldump --all-databases --no-data --default-character-set=euckr -p > backup.scheme.sql
- euckr 자료 백업
mysqldump --all-databases --no-create-db --no-create-info --default-character-set=euckr -p > backup.data.sql
웬만하면 사용자계정 정보는 암호까지 확실하게 알고있자.
GRANT ALL 쿼리문을 직접 작성하여 가지고 있자.
- UTF-8 을 제대로 지원하기 위해 버전을 5.x 로 올린다.
(varchar(1) 은 1byte 가 아닌 한글자를 의미하게 된다.
set names 만으로 클라이언트의 캐릭터셋을 맞출 수 있다.)
= backup.scheme.sql =
테이블 중 BLOB 형식이나 BINARY 속성 필드에 문자열이 들어가는 곳이 있다면,
TEXT 형식으로 바꾸거나 BINARY 속성을 없앤다.
DEFAULT '0' 같은 잘못된 따옴표를 고친다.
TYPE=MyISAM 같은건 ENGINE=MyISAM 으로 수정한다.
맨 위쪽의 SET NAMES euckr 을 제외한 모든 CHARACTER SET 의 euckr 을 utf8 로 수정한다.
cat backup.scheme.sql | mysql -p --default-character-set=utf8
mysql 설정이 utf8 기준이고, sql 문에 SET NAMES euckr 이 들어있다.
즉, 생성은 utf8 로 되지만, 데이터가 euckr 이라는것을 알고 있으므로,
자동으로 변환되어 들어간다.
이는 iconv 를 이용한 변환보다 안전하다.
(MySQL 의 옛날 버전은 멀쩡한 한글조차 escape 시켜 놓는 경우가 있다.)
= backup.data.sql =
cat backup.data.sql | mysql -p --default-character-set=utf8
- 사용자계정을 GRANT ALL 문으로 다시 만들어준다.
root 지워버리지 않게 주의.
-- old --
이전 MySQL 에 charset 관련 옵션이 없다면,
스키마는
cat backup.scheme.sql | mysql -p --default-character-set=utf8
데이터는
cat backup.data.sql | mysql -p --default-character-set=euckr
로 복구하면 된다.
스키마는 꼭 꼼꼼히 살펴보고 편집하자.
스키마에 한글로 된 주석 같은것이 있다면,
지워버리는것이 속 편하지만,
살리고자 한다면, 편집이 필요하다.
backup.scheme.sql 을 열고 맨 위에
SET NAMES euckr; 을 적어주자.
다른 줄에 SET NAMES 가 없어야 한다.
그리고 CREATE DATABASE, CREATE TABLE 문에 일일히 CHARACTER SET utf8;
을 붙여주자.
편집시 편집기에 의해 캐릭터 셋이 변경되지 않도록,
별 기능 없는 편집기를 이용하자.
2. 파일
모든 파일의 내용을 utf8 로 바꾸자.
조건에 따라 동작이 달라지므로 php 를 이용하자.
/toutf.php
<?php
$f = $_SERVER['argv'][1];
if(!file_exists($f)) {
echo $f." file not found.\n";
}
$text = file_get_contents($f);
$text8 = @iconv('CP949', 'UTF-8//IGNORE', $text);
$cnt = strlen($text);
$cnt8 = strlen($text8);
if($cnt <= $cnt8) {
// 제대로 변경이 되었다면 용량이 커졌을 것이다.
// 용량이 같다면 한글이 없는 것이다.
rename($f, $f.'.euckr'); // 백업
file_put_contents($f, preg_replace('/charset=euc-kr/i', 'charset=utf-8', $text8));
echo $f." file is converted.\n";
} else {
// 용량이 작아진다면 잘못된 것이다.
$fp = fopen('/error.txt', 'a');
fwrite($fp, $f."\n");
fclose($fp);
}
?>
find /home -type f -name "*.php" -exec php /toutf.php "{}" \;
find /home -type f -name "*.inc" -exec php /toutf.php "{}" \;
find /home -type f -name "*.txt" -exec php /toutf.php "{}" \;
find /home -type f -name "*.html" -exec php /toutf.php "{}" \;
find /home -type f -name "*.htm" -exec php /toutf.php "{}" \;
find /home -type f -name "*.js" -exec php /toutf.php "{}" \;
find /home -type f -name "*.css" -exec php /toutf.php "{}" \;
현재 UTF-8 이 아닌 곳이 없기 때문에,
기억을 더듬어 대충 만들었다.
적용전 백업은 필수다.
에디터는 EmEditor, DreamWeaver CS3 를 추천한다.
FTP 는 WinSCP 4 를 추천한다. 윈도 커멘더 모드로 하면 파일명이 지X 같아도 잘 올리고 받아질 것이다.
WinSCP 의 에디터로 EmEditor 를 설정하면 무적이다.
EmEditor 는 기능이 조금 제한된 free 버전이 있다.
'Study_Web > PHP' 카테고리의 다른 글
PHP에서 오라클을 사용하여 불러온 데이터에 한글이 깨져서 나오는 경우. (1) | 2009.03.18 |
---|---|
PHP 5 레퍼런스 파일(CHM) 목차의 문자 깨지는 문제 해결책 (0) | 2009.03.10 |
19 Promising PHP Template Engines (0) | 2009.01.16 |
ZendOptimizer-2.x Ver 다운로드 (0) | 2008.11.25 |
.htaccess 사용해서 이미지 외부링크 막기 (0) | 2007.08.22 |