EcStart PHP 技術討論論壇's Archiver

FIEND 發表於 2006-12-10 20:27

分享 - mysql big5 轉 utf-8 轉換程式

#############################################################################
# 作者 : fiend
# 文章出處 : http://forum.heytalk.com/  ,  http://bbs.ecstart.com/
#  轉貼請註明出處
#############################################################################

義務替 黑秀網將 big5 轉成 utf-8 環境 :

所以寫了這支程式 ,

這支程式 會 dump 出 db 下的所有 insert 的 query ,

使用方法

1.

將 big5 環境的 create dump 出來 ,

然後 再將 CHARSET=latin1 或 CHARSET=big5

改成 CHARSET=utf8

然後 create 一個空的 databases + table .

2.  
下載 metabase :  請參考附件

3.
convert.php
[code]
#!/usr/bin/php -q
<?php
set_time_limit(0) ;
############################################################################
# sql link start
############################################################################
$db_type                = "mysql";
$host_name              = "localhost" ;
$database_name          = "heyforum_dz5" ;
$user_id                = "root" ;
$user_password          = "xxxxxxxxxxxx" ;
include_once("metabase/metabase_interface.php");
include_once("metabase/metabase_database.php");
$db_params=array(
                     "Host"             =>$host_name
                     ,"Type"            =>$db_type
                     ,"User"            =>$user_id
                     ,"Password"        =>$user_password
                     ,"IncludePath"     =>"metabase/"
                     ,"Persistent"      =>0
                     );
############################################################################
# sql link end
############################################################################

$error=MetabaseSetupDatabase($db_params,$db);
MetabaseSetDatabase($db,$database_name);

$query ="show tables";
$db_res=MetabaseQuery($db,$query);
if(!$db_res) {
        ecstart_alert_err($msg["system_err"]);
}
$rows=MetabaseNumberOfRows($db,$db_res);
MetabaseGetColumnNames($db,$db_res,$db_field_name);
if($rows)
{
        for($row=1;$row<=$rows;$row++)
        {
                if(is_array($db_field_name)){
                        foreach($db_field_name as $key => $value){
                                $table[$row-1]=MetabaseFetchResult($db,$db_res,$row-1,$key) ;
                        }
                }
        }
}
if(is_array($table)){
        foreach($table as $k => $v){
                $query ="describe ".$v;
                $db_res=MetabaseQuery($db,$query);
                if(!$db_res) {
                        ecstart_alert_err($msg["system_err"]);
                }
                $rows=MetabaseNumberOfRows($db,$db_res);
                MetabaseGetColumnNames($db,$db_res,$db_field_name);
                if($rows)
                {
                        for($row=1;$row<=$rows;$row++)
                        {
                                if(is_array($db_field_name)){
                                        foreach($db_field_name as $key => $value){
                                                $field[$v][$row-1]=MetabaseFetchResult($db,$db_res,$row-1,"field") ;
                                        }
                                }
                        }
                }
                //print_r($field);



        }
}




if(is_array($field)){
        foreach($field as $k => $v){
                // get field value
                $query ="select * from ".$k;
                $db_res=MetabaseQuery($db,$query);
                if(!$db_res) {
                        ecstart_alert_err($msg["system_err"]);
                }
                $rows=MetabaseNumberOfRows($db,$db_res);
                MetabaseGetColumnNames($db,$db_res,$db_field_name);
                if($rows)
                {
                        for($row=1;$row<=$rows;$row++)
                        {
                                if(is_array($db_field_name)){
                                        foreach($db_field_name as $key => $value){
                                                $field_value[$row-1][$key]=MetabaseFetchResult($db,$db_res,$row-1,$key) ;

                                        }
                                }
                                $no = 0 ;
                                $field_str = "";
                                foreach($v as $fv){
                                        if($no == 0){
                                                $field_str .= "`".$fv."`";
                                        }
                                        else{
                                                $field_str .= ",`".$fv."`";
                                        }
                                        $no = $no+1 ;
                                }

                                $sno = 0 ;
                               $field_value_str = "";
                                foreach($field_value[$row-1] as $fvk =>  $fvv){
                                        if($sno == 0){
                                                $field_value_str .= "'".mysql_escape_string(iconv('BIG5','UTF-8',$fvv))."'";
                                        }
                                        else{
                                                $field_value_str .= ",'".mysql_escape_string(iconv('BIG5','UTF-8',$fvv))."'";
                                        }
                                        $sno = $sno+1 ;
                                }


                                $query = "insert into ".$k."(".$field_str.") values(".$field_value_str.");";
                                unset($field_value[$row-1]);
                                unset($field_str);
                                unset($field_value_str);
                                echo $query . "\n";
                                //print_r($field_value);
                        }
                }

                unset($field_value);
        }
}





MetabaseCloseSetup($db)

?>

[/code]


4.  
將 convert.php 存檔後

執行 ./convert.php > convert.sql

5. mysql database_name -uroot -p < convert.sql

好了 ccc

網站義工 發表於 2006-12-14 20:36

太好了...我先收下了:lol:

xenonco2 發表於 2006-12-27 09:00

很不錯唷
正好有這個需要

tommyleung 發表於 2006-12-29 16:09

不錯不錯

我正找這樣子的功能!

西門 發表於 2007-1-8 15:49

Fatal error: Call to undefined function: ecstart_alert_err()  on line 32

出錯了嗎??

tsung239 發表於 2007-1-8 21:20

謝謝大大分享~~~
趕緊來看看!!!

kloo 發表於 2007-3-10 02:36

會出錯嗎 ?
我來試試看

FIEND 發表於 2007-3-30 08:09

疑... 我地不會咧...

bake 發表於 2007-4-3 15:00

真是太好了!可惜我的金幣太少無法下載。

AASHING 發表於 2007-4-7 00:01

此轉換程式,本人認為會用得到!!!

lookgirl 發表於 2007-4-17 19:32

太好了...我先收下了

27xy 發表於 2007-4-20 16:12

太好了...我先收下了

27xy 發表於 2007-4-20 16:15

太好了...我先收下了

quicktop 發表於 2007-4-24 16:54

好像不錯用 來試試看

hkttz 發表於 2007-4-25 15:44

這個可以用在windows 的嗎?

JamesCW 發表於 2007-4-29 16:18

請問

如果要從一個本來是Latin1作為Defualt character set的Database轉換成為utf-8
是否可乆以用樓主的程式來進行轉換?

heymax 發表於 2007-4-30 12:55

真的能用嗎 ???

b_e_r_t 發表於 2007-5-8 03:40

太好了...我先收下了

傻仔仔 發表於 2007-5-8 15:41

太好了..謝謝

Zisal 發表於 2007-5-25 02:50

謝謝囉!:loveliness: 收下了:)

kwli 發表於 2007-5-30 02:27

太好了! 謝謝分享!:) :) :)

ivan11 發表於 2007-6-12 15:50

謝謝大大分享!可惜金幣太少無法下載。

ienfuchen 發表於 2007-6-16 23:42

有誰是過的分享一下心得~~最重要的事會不會很難阿

ienfuchen 發表於 2007-6-16 23:57

有誰是過的分享一下心得~~最重要的事會不會很難阿

shungyiu 發表於 2007-7-5 15:20

不知要多少E幣才能下載?很想試一下這個方法。

pcboy0621 發表於 2007-7-9 15:02

哇勒 ~
管理員設置了當您的金幣低於 0 E幣的下限時不能進行此操作

但是左邊顯示我有  5 個 E 幣啊

[[i] 本帖最後由 pcboy0621 於 2007-7-9 15:03 編輯 [/i]]

sbirddy 發表於 2007-7-16 14:51

哦~~很方便的程式喔,簡化了不少步驟,一定要推的

chunboy 發表於 2007-7-16 15:06

thank you very much!

chunboy 發表於 2007-7-16 15:12

管理員設置了當您的金幣低於 0 E幣的下限時不能進行此操作

但是左邊顯示我有  5 個 E 幣啊

help~~~

sumandy 發表於 2007-8-3 23:47

不明白怎用 :mad: 怎弄出來呢?

andyde 發表於 2007-9-20 13:51

真是感謝...正好需要這個東西

jrstar 發表於 2007-10-7 23:46

找了很多個轉換程式,不知道這個能不能成功:P

a111222 發表於 2007-10-8 03:47

good!
THX~~~~~~~!

hoyin630 發表於 2007-10-8 22:25

thx !!
good !!!!!

70297 發表於 2007-10-10 15:47

我需要這個東西,不知道怎樣才能得到一個金幣!@@

70297 發表於 2007-10-10 15:49

我不是 0 E幣了,為什麼還是不能下載!鳴鳴~~~

markdax 發表於 2007-11-13 11:32

我也是不能下載

繼續努力發言中

kohong 發表於 2007-11-22 19:31

THX~~~~~~~~~~~~~~~~~I NEED TO DOWNLOAD

kohong 發表於 2007-11-22 19:32

:loveliness: :loveliness: :loveliness: :loveliness: 仲係DOWNLOAD唔到~

ytpong 發表於 2008-1-13 18:33

謝謝樓主的創作~~
太有用了~~

頁: [1] 2

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.