Mysql: latin1 資料庫和 table 轉成 UTF8 (以 PHP 來轉換吧)

自爆前別忘了帶走我的青春

快速搜尋

日曆

後退 九月 '10
一 二 三 四 五 六 日
    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      

保存文庫

  • 九月 2010
  • 八月 2010
  • 七月 2010
  • 新文庫...
  • 舊文庫...

Show tagged entries

xml animation
xml drama
xml Linux
xml mushishi
xml nba
xml oracle
xml 奇諾

類別

  • XML 亂七八糟
  • XML 你不想要的知識
  • XML 便利貼
  • XML 可以去晃的網站
  • XML 回憶錄
  • XML 工程師筆記本
  • XML Linux
  • XML 我的 animation 記憶
  • XML 戲劇


全部類別

同步這個網誌

  • XML RSS 2.0 feed
  • XML OPML 1.0 feed

Bookmark

全部展開 | 全部收納

迴響

k29 發佈於 Mysql: latin1 資料庫和 table 轉成 UTF8 (以 PHP 來轉換吧)
三, 07.04.2010 11:14
感恩迴響 (1)
Dante Mason 發佈於 ioi external raid MIRROR DRIVE II + udevinfo
六, 10.10.2009 14:51
http://www.ioidocking.com.tw迴響 ()
kiku 發佈於 ioi external raid MIRROR DRIVE II + udevinfo
六, 10.10.2009 03:32
請問哪裡買 謝謝迴響 ()
Don 發佈於 MySQL 5, PHP5 和一堆問號
五, 09.10.2009 21:14
謝謝分享!迴響 ()
我就是那友人嗎 發佈於 NBA 官方提供的 widget
四, 24.09.2009 11:28
原來俺也能啟發人, 讚啦~ How a re you man?迴響 ()
Dante Mason 發佈於 牽新車 Bubu 125 美規 綠色
六, 08.08.2009 22:52
好騎。但是我的習慣最高只有到時 速60公里。所以沒辦法給你高速的 狀況。我買五期噴射鼓煞的,5780 0。目前五期噴射的125機車 [...]迴響 ()
Dante Mason 發佈於 ies4linux 與 微軟正黑體的二三事
六, 08.08.2009 22:45
繁體中文版的Windows Vista 裡面 有,就是「微軟正黑體」迴響 ()
書書 發佈於 牽新車 Bubu 125 美規 綠色
六, 08.08.2009 21:54
請問美規BUBU好騎嗎? 您買一台 多少錢呢? 不好意思打擾到了^^迴響 ()
flasher coder 發佈於 ies4linux 與 微軟正黑體的二三事
六, 08.08.2009 14:51
朋友你好,請問哪裡可以下載到微 軟字體microsoft jhengheiBold? 我是大陸的,在網上找了一下,似 乎找不到這個字體迴響 ()
Dante Mason 發佈於 牽新車 Bubu 125 美規 綠色
一, 03.08.2009 21:33
對啊,不過比偉士牌小很多迴響 ()
Kai 發佈於 牽新車 Bubu 125 美規 綠色
一, 03.08.2009 18:13
怎麼那麼像當年的偉士牌迴響 ()
plus-now 發佈於 Oracle 10g 變更資料庫的 characterset
三, 15.07.2009 23:54
我今天也遇到這個問題,解決方法 如下: http://plus-now.com/?p =376迴響 ()
SO SAY WE ALL 發佈於 BATTLESTAR GALACTICA
二, 09.06.2009 18:07
最近看完這部影集,有非常多的議 題值得思考,說是從小到大看過的 影集中內容最廣而深的也不為過! 強力推薦給喜歡還沒看過的 [...]迴響 ()
simbaforrest 發佈於 奇諾之旅 -- (13-END) 親切的國家
四, 07.05.2009 20:41
呵呵,刚看完《蟲师》,在网友推 荐下开始看《奇诺之旅》,很喜欢 两者的风格。 楼主的总结不错呀 ~~~迴響 ()
anon 發佈於 貼片無用 champix 啟動
一, 27.04.2009 19:35
那只是我從 google 找到的圖片, 不是我自己拍的啦迴響 ()

週四, 十一月 2. 2006

Mysql: latin1 資料庫和 table 轉成 UTF8 (以 PHP 來轉換吧)

mysql_logo
從前的舊包袱:MySQL database 和 table 都是 latin1,資料裡面有big5中文。又因應 big5,所以會有許多的 escape char("\") 在裡面;如今 UTF-8 的趨勢,用 mysqldump 出來的資料,裡面有 big5 的 \,也有跳脫特殊資源的 \,用 iconv 或 piconv 把 dump 出來的文字檔轉成 UTF-8 之後,要塞進新的資料庫會出現一堆問題,不外乎是取代跳脫字元時的例外狀況。資料不多的狀況下還好辦,用人眼判斷即可。但是資料量達到數十萬筆甚至數百萬筆的時候,恐怕還是換個方法吧。


環境如下:

系統直接升級為 MySQL version 5
舊的資料庫 OLD_DB ,charset 是 latin1,裡面有一個 table 叫作 tbl, charset 亦為 latin1

my.cnf 裡面

[client] 中有設定 default-character-set = utf8

[mysqld] 中有設定 default-character-set = utf8 還有 skip-character-set-client-handshake

[mysql] 中有設定 default-character-set = utf8

寫一個像以下的 php 如下:

<?
$outputfile= "OUTPUT.sql";
$DB_HOST="localhost";
$DB_USER="testuser";
$DB_PASS="testpass";
$DB_DBNAME="OLD_DB";
$DB_TABLE="tbl";

$fp=fopen($outputfile, "w+");
if(!$fp){
echo "Can not open file for writing.\n";
exit;
}

$dbcon=mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
mysql_query("SET NAMES latin1", $dbcon);
mysql_select_db($DB_DBNAME, $dbcon);
$sqlstr="select * from $DB_TABLE";
$rs=mysql_query($sqlstr, $dbcon);
$NAMESTR="SET NAMES utf8;\r\n\r\n";
fwrite($fp, $NAMESTR, strlen($NAMESTR));
while($rsrow=mysql_fetch_row($rs)){
$i_sqlstr="INSERT INTO $DB_TABLE VALUES(";
foreach($rsrow as $rid=>$rval){
$rsrow[$rid]=iconv("BIG5", "UTF-8", $rval);
if(strval($rid)=="0")
$i_sqlstr.="'".addslashes($rsrow[$rid])."'";
else
$i_sqlstr.=", '".addslashes($rsrow[$rid])."'";
}
$i_sqlstr.=");\r\n\r\n";
fwrite($fp, $i_sqlstr, strlen($i_sqlstr));
}
mysql_free_result($rs);
mysql_close($dbcon);
fclose($fp);

exit;
?>

執行這個 php 之後,會產生一個 OUTPUT.sql

匯入之前,先建好新的 database 和 table。記得新的 databae 和 table 都要以 utf8 為 default charset

然後就可以 mysql -u XXX -p < OUTPUT.sql

轉換為 UTF-8 的過程並不會比傳統 mysqldump 出來再 import 進去來得慢。

作者 Dante Mason 時間 10:50 | 迴響 (2) | 引用 (0)
Defined tags for this entry: linux
Related entries by tags:
  • Asus 1201N wireless lan AW-NE107(Realtek 8171)
  • 跟NBA打季後賽一樣,關鍵是老將啊!
  • intel GMA-500:uvesafb 1366x768
  • RHEL on Virtualbox with 2 bridged NIC
  • 不再使用smbpasswd更改 samba 密碼

引用
引用此文章特定的 URI (網址)

沒有引用

迴響
迴響顯示方式 (直線程 | 分線程)

請受我一拜
迴響 (1)
#1 pahud 於 2006-11-02 14:06 (回覆)
感恩
迴響 (1)
#2 k29 於 2010-04-07 11:14 (回覆)

新增迴響

星號圍住的文章會以粗體顯示 (*word*),底線是 _word_。
字串像 :-) 和 ;-) 會轉換成圖案。

為了避免自動廣告程式輸入迴響,請輸入圖片裡的文字。如果文字正確,迴響就可以正常發佈。記得瀏覽器必須支援 cookies 要不然您的迴響無法通過測驗。
CAPTCHA

BBCode 可用的格式
 
 

Powered by

Serendipity PHP Weblog

網誌管理

開啟登入頁面

本網站使用

Creative Commons License - Some Rights Reserved
原著作內容的版權是 CC 授權條款