顯示具有 mysql 標籤的文章。 顯示所有文章
顯示具有 mysql 標籤的文章。 顯示所有文章

2011年7月19日 星期二

MySQL 升級成 5.0 與 UTF-8 之相關解決方法 ......]

[MySQL 升級成 5.0 與 UTF-8 之相關解決方法 ......]

http://www.j2h.tw/bbs/bbs16/150.html


----------------------------------------------


從MySQL4.0升級至5.0。



首先把資料dump出來 。由於先前用4.0時我的資料是存成latin1,不管是Big5或是wordpress的UTF-8存進去後都是變成lantin1,所以dump出來後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上–default-character-set=latin1



如果原先是Big5的資料,像我的Coppermine Photo Gallery,dump出來後就直接把Big5轉成UTF-8即可



#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql



#piconv -f big5 -t utf8 output.sql >utf8.sql



如果原先是UTF-8的資料,像是wordpress,dump出來後要先轉成Big5後,再把他轉成UTF-8,因為原先dump出來的是偽裝成UTF-8的lantin1不是真正的UTF-8



#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql



#piconv -f utf8 -t big5 output.sql > big5.sql

#piconv -f big5 -t utf8 big5.sql >utf8.sql



接著MySQL5.0灌好後,MySQL的my.cnf設定檔內要加入以下設定



[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8

default-collation=utf8_general_ci



但也有看到資料說[mysqld]那邊加上 default-character-set=utf8跟 default-collation=utf8_general_ci後,一些舊的使用Big5編碼的php程式,又沒有加入連資料庫時指定的編碼方式的相關code的話,那些程式就會爛掉,所以目前我是沒有加上那兩行。



接著建立空的資料庫準備把dump出來的資料import進去,SQL語法應該類似下面這樣,要加上DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci



CREATE DATABASE `abc` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;



我是用phpMyAdmin建立資料庫的,建立時”校對”要選utf8_general_ci



再來就是把剛剛dump出來後的sql檔在import進去了,這裡有兩點要注意的。

1.剛剛dump出來的sql檔如果原先是Big5里面會有一些像是許功蓋這些字後面會多了一個”\“,記得用文字編輯器把他消掉2.import進去時記得還要先修改一下dump出來的sql檔,在最前面加上



SET NAMES utf8;

SET CHARACTER_SET_CLIENT=utf8;

SET CHARACTER_SET_RESULTS=utf8;



再來把每個資料表後面的



TYPE=MyISAM;



改成



ENGINE=MyISAM DEFAULT CHARSET=utf8;



都改好後就可以把他import進去了



#mysql -u帳號 -p 資料庫 < utf8.sql



不過以上實在有點麻煩,所以我把多餘的”/“消掉後,就直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可



順便記一下寫php時如是配合UTF-8的資料庫的話該注意,在真正送出query前要先加入以下三行



mysql_query(”SET NAMES ‘utf8‘”);

mysql_query(”SET CHARACTER_SET_CLIENT=utf8“);

mysql_query(”SET CHARACTER_SET_RESULTS=utf8“);



檢查語系的SQL語法



show variables like “%character%”;

----------------------------------------------

MySQL 升級成 5.0 與 UTF-8 之相關解決方法 ......]

[MySQL 升級成 5.0 與 UTF-8 之相關解決方法 ......]

http://www.j2h.tw/bbs/bbs16/150.html


----------------------------------------------


從MySQL4.0升級至5.0。



首先把資料dump出來 。由於先前用4.0時我的資料是存成latin1,不管是Big5或是wordpress的UTF-8存進去後都是變成lantin1,所以dump出來後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上–default-character-set=latin1



如果原先是Big5的資料,像我的Coppermine Photo Gallery,dump出來後就直接把Big5轉成UTF-8即可



#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql



#piconv -f big5 -t utf8 output.sql >utf8.sql



如果原先是UTF-8的資料,像是wordpress,dump出來後要先轉成Big5後,再把他轉成UTF-8,因為原先dump出來的是偽裝成UTF-8的lantin1不是真正的UTF-8



#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql



#piconv -f utf8 -t big5 output.sql > big5.sql

#piconv -f big5 -t utf8 big5.sql >utf8.sql



接著MySQL5.0灌好後,MySQL的my.cnf設定檔內要加入以下設定



[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8

default-collation=utf8_general_ci



但也有看到資料說[mysqld]那邊加上 default-character-set=utf8跟 default-collation=utf8_general_ci後,一些舊的使用Big5編碼的php程式,又沒有加入連資料庫時指定的編碼方式的相關code的話,那些程式就會爛掉,所以目前我是沒有加上那兩行。



接著建立空的資料庫準備把dump出來的資料import進去,SQL語法應該類似下面這樣,要加上DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci



CREATE DATABASE `abc` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;



我是用phpMyAdmin建立資料庫的,建立時”校對”要選utf8_general_ci



再來就是把剛剛dump出來後的sql檔在import進去了,這裡有兩點要注意的。

1.剛剛dump出來的sql檔如果原先是Big5里面會有一些像是許功蓋這些字後面會多了一個”\“,記得用文字編輯器把他消掉2.import進去時記得還要先修改一下dump出來的sql檔,在最前面加上



SET NAMES utf8;

SET CHARACTER_SET_CLIENT=utf8;

SET CHARACTER_SET_RESULTS=utf8;



再來把每個資料表後面的



TYPE=MyISAM;



改成



ENGINE=MyISAM DEFAULT CHARSET=utf8;



都改好後就可以把他import進去了



#mysql -u帳號 -p 資料庫 < utf8.sql



不過以上實在有點麻煩,所以我把多餘的”/“消掉後,就直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可



順便記一下寫php時如是配合UTF-8的資料庫的話該注意,在真正送出query前要先加入以下三行



mysql_query(”SET NAMES ‘utf8‘”);

mysql_query(”SET CHARACTER_SET_CLIENT=utf8“);

mysql_query(”SET CHARACTER_SET_RESULTS=utf8“);



檢查語系的SQL語法



show variables like “%character%”;

----------------------------------------------

2011年7月12日 星期二

分享MySQL和php採用UTF8的詳細方法

******   網 站 全 面 採 用 UTF-8 方法.   ******  

1. 用 vi /etc/httpd/conf/httpd.conf 設定Apache中的語系為:( (記得restart)
         AddDefaultCharset UTF-8

2. 用 vi /etc/php.ini 設定php中的語系為:( (記得restart)
         default_charset = "utf-8"

3. 用 vi /etc/my.cnf 設定MySQL中的語系為:( (記得restart)
      [mysqld]
         init_connect='SET NAMES utf8'
         default-character-set=utf8
      [client]
         default-character-set = utf8

4. 建立資料庫時選擇語系: (記得清除DB Cache)
      DROP DATABASE IF EXISTS `aa`;
      CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      USE `aa`;
     
      CREATE TABLE  IF NOT EXISTS `aat` (
        `id` char(1) NOT NULL default '1',
        `myStr` varchar(200) default NULL,
        PRIMARY KEY  (`id`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

5. 用UltraEdit(v11.20a版) 轉換所有ANSI格式的php檔案轉化為UTF-8格式:
      File --> Conversions --> ASCII to UTF-8 (Unicoding Editing)
   ( 在UltraEdit中按Advanced --> configuration --> File Handling
     --> Unicode/UTF-8 Detection --> 剔選Auto detect utf-8 files )
    如有需要時,可執行Remove BOM.php. 當用WinXP的Notepad將php檔由ANSI轉為UTF-8時,
  因檔頭有BOM,會引起排版問題,故必須移除,執行Remove BOM.php即可自動移除.
  Remove BOM.php可由以下網址下載:
  http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=13&author=hoyo&status=view

6. 在php檔中必須加入:
      <html><head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      </head><body>     

7. 在連接DB的檔中必須加入3行mysql_query才ok:
         $host="localhost";         $DBname="aa";
         $user= "root";         $passwd  = "";    
         $link = mysql_connect($host,$user,$passwd) or die ("Fail");
         $db = mysql_select_db($DBname, $link) or die ("Fail");              
     // 要在真正query DB取出資料前,加入以下3行
         mysql_query("SET NAMES 'utf8'");
         mysql_query("SET CHARACTER_SET_CLIENT=utf8");
         mysql_query("SET CHARACTER_SET_RESULTS=utf8");
         $sql  = "select * from aat where crid='1'";
         $rows = mysql_query($sql);

8. 在php檔中, 如有需要須注意: [Optional]
      運用htmlentities和htmlspecialchars時,要似如下:
         $chars = htmlentities($chars,ENT_QUOTES,"UTF-8");
         $chars = htmlspecialchars($chars,ENT_QUOTES,"UTF-8");
      並且在顯示前要用
         $chars = html_entity_decode($chars,ENT_QUOTES,"UTF8");
      如有用過addslashes()或mysql_real_escape_string()記得用以下:
         $chars = stripslashes($chars);
      如有需要可以用以下function將不同編碼轉換:
         $chars = iconv('Big5','UTF-8',$chars);  //由Big5轉為UTF-8

2011年7月10日 星期日

去掉 BIG-5 轉 UTF-8 衝碼字的反斜線

討論】:關於去掉 BIG-5 轉 UTF-8 衝碼字的反斜線 : http://phpbb-tw.net/phpbb/viewtopic.php?t=41901

進藤ヒカル さん


虛擬画像

作成: 04/28/07 04:57pm
關閉目前運作中的 BIG-5 舊網站

在備份整個網站的資料庫之前,當然要先關閉網站,以免又有不知情的網友,貼心的想要發表新的文章或是回覆文章。請用管理者身分登入,然後點選 “系統管理員選單”:

《按一下可顯示圖片》

這個就是 XOOPS 後台管理畫面的一部份,最底下可以看到目前的版本還是 XOOPS 2.0.13.2。由於 XOOPS 改版速度太慢,幾近於 “超龜速”,所以這已經是很久以前的版本,目前最新的 2.0 系列版本是 2.0.16。不過這個版本的 “Upgrade” 升級模組有 bug,會導致 LDAP 功能異常!如果是全新安裝架設的網站,大概比較沒有問題。

《按一下可顯示圖片》

在 “系統管理” 模組點選 “系統設定” 或是 “偏好設定”:

《按一下可顯示圖片》

把 “暫時關閉網站” 改成 “是”,這樣子就只有管理者可以看到整個網站,建議你登出帳號確認一下網站是不是真的關掉了?

《按一下可顯示圖片》

如果沒有 “登出” 就直接回到網站 “首頁” 的話...

《按一下可顯示圖片》

其實看不出網站到底關掉了沒?請按一下 “登出”:

《按一下可顯示圖片》

這樣子才會看到網站關閉的畫面,提醒你可以先到 “BNW 會議室” 逛逛,晚點再回來瞧瞧,但是要記得回來喔~不要到處亂逛到其他網站去了... :oops:

《按一下可顯示圖片》

進藤ヒカル さん


虛擬画像

作成: 04/28/07 04:58pm
從租用主機備份資料庫

要從租用的網路主機轉移網站,當然要先把整個 MySQL 資料庫全部備份出來。打開網路主機廠商提供的 phpMyAdmin 網頁,先在左邊的面板點選要備份的資料,例如:wusin_test,再按一下網頁上方的 “輸出” 鈕,然後按 “全選” 匯出全部的資料表。

《按一下可顯示圖片》

這種備份方式跟你直接在 phpMyAdmin 首頁點選 “輸出” 不同,沒有打開指定的資料庫,直接在首頁點選 “輸出” 再點選資料庫,會把整個資料庫全部匯出,因此在另外一台 MySQL 主機匯入資料庫的時候,就必須是使用相同的資料庫名稱。因為我想要更換資料庫名稱,不再使用 wusin_test,因此我用全選資料表的方式來匯出整個網站資料。

要提醒你的是... 在 SQL 選項的結構請點選 Add DROP TABLE、Add IF NOT EXISTS 這兩個選項,第一個會在 .sql 檔案裡加上刪除舊的資料表指令,第二個指令是如果資料表不存在的話,就自動新增資料表。這樣子可以減少匯入資料時候的錯誤。

請點選 “使用完整新增指令”:

《按一下可顯示圖片》

接著點選 “下載儲存”,壓縮方式請選用 “zipped”,壓縮成 .zip 檔案。雖然 Linux 主機都支援 .gz 檔,不過使用這種格式,可能會無法完全解壓縮,解到一半就出問題!

《按一下可顯示圖片》

phpMyAdmin 會把資料庫備份、壓縮好,然後自動下載為 wusin_test.sql.zip 壓縮檔。

《按一下可顯示圖片》

解壓縮之後就會看到備份的 wusin_test.sql 資料庫檔案。

《按一下可顯示圖片》

進藤ヒカル さん


虛擬画像

作成: 04/28/07 04:59pm
在 Mac 檢視備份的資料庫內容

所有的 .sql 檔案都是 “純文字” 檔案,基本上可用任何一個文字編輯工具開啟,不過呢... 如果是 BIG-5 HKSCS 編碼的檔案,這個檔案無論在 Mac OS X 還是 Windows 上都會遇到問題!

我用 “文字編輯” 以 Unicode(UTF-8)的方式來開啟 wusin_test.sql 資料庫檔,結果... 當然是無法開啟囉!

《按一下可顯示圖片》

點選 “自定編碼列表...”:

《按一下可顯示圖片》

再點選新增 “繁體中文 (Windows, DOS)” 編碼方式...

《按一下可顯示圖片》

就可以新增更多的文件語系,既然 UTF-8 與 “繁體中文 (Mac OS)” 都無法開啟,試試看 “繁體中文 (Windows, DOS)” 吧~

《按一下可顯示圖片》

居然說無法使用文字編碼的 “繁體中文 (Windows, DOS)” 來打開檔案! :-o

《按一下可顯示圖片》

再點選全部的 “繁體中文” 編碼方式... 每種格式都測試看看,竟然沒有一種格式可以開啟這個 .sql 檔!事實上就算你改用著名的 BBEdit 也無法正確的開啟這個繁體中文編碼的 .sql 檔! :Orz

《按一下可顯示圖片》

好吧,點選 “前往 / 連接伺服器” 把這個 .sql 資料庫檔案透過網路拷貝給 Windows 來試試看吧...

《按一下可顯示圖片》

連接到 Windows 共享的 “網路檔案夾”:

《按一下可顯示圖片》

把這個 .sql 檔案複製給 Windows。資料夾裡面的其他檔案是我先前所做的測試,等到網站租約到期以前,決定關閉的時候再做一次最後的備份。

《按一下可顯示圖片》

進藤ヒカル さん


虛擬画像

作成: 04/28/07 05:00pm
在 Windows 檢視備份的資料庫內容

這就是同樣的檔案在 Windows 看到的畫面,整個 .sql 資料庫大約有 11MB 左右:

《按一下可顯示圖片》

直接用 “記事本” 打開 wusin_test.sql 就會看到這樣的畫面... 嗯~有點奇怪對吧?

《按一下可顯示圖片》

別以為資料庫的內容原本就應該長成這樣喔!事實上是因為 Linux 對於換行的方式與 Windwos 不同,所以原本應該換行的地方都沒有換行,整個 .sql 文件變成超大的一行段落!

在 BIG-5 編碼格式底下,最大的問題就是 “許功蓋” 這號蓋世人物的衝碼問題,為了避開文字內碼與 SQL 衝突,所以在後面補上了一個多餘的 \ 符號。

《按一下可顯示圖片》

並不是每個 “許功蓋” 後面都會補上 \ 符號,你可以看到如果是在一行最後的位置,因為 \r\n 段落換行 (也就是 Enter 鍵) 的關係,會因此補上 \\rn 這樣的符號。

《按一下可顯示圖片》

進藤ヒカル さん


虛擬画像

作成: 04/28/07 05:08pm
透過ConverZ把BIG-5轉UTF-8

雖然 Mac OS X 也有幾個還滿好用的轉換檔案內容編碼格式的工具,不過都沒有 ConvertZ 好用,只是你得用 Windows 2000/XP/Vista 來跑 ConvertZ 這個 Windows 版本的工具程式。

ConvertZ 除了可以轉換文字編碼方式,還可以同時幫我們搜尋、取代特定的文字,一次完成兩件事,又完全免費,還不需要安裝就能直接使用,真是相當不錯的 “站長必備工具”! :-)

你可以在原作者網站下載 ConvertZ:http://alf-li.pcdiscuss.com/c_convertz.html
ConvertZ 屬於環保的綠色軟體,無須安裝,只要將所有檔案解壓到新資料夾,然後直接執行 convertz.exe 即可。

要解決 “許功蓋” 等中文字與 SQL 指令衝突的問題,你可以用 “記事本” 建立一個搜尋與取代的對照檔,例如 “將BIG-5轉UTF-8修正” 或是 “修正許功蓋”,檔名隨便你取,但是副檔名必須是 .dat,因此得用右鍵指定用 “記事本” 來開啟 .dat 文字檔。

《按一下可顯示圖片》

搜尋與取代的對照表就像這樣,把 “功\\” 取代為 “功”,刪除後面重複的 “\\” 雙反斜線符號。

《按一下可顯示圖片》

除了有重複的 “\\” 雙反斜線符號,也有 “\” 單反斜線的情況,只有緊跟著這些字後面的 \ 符號才需要刪除,並不是把全部的 \\ 或 \ 全數刪除喔!

《按一下可顯示圖片》

打開 ConverZ,在來源檔案把 wusin_test.sql 加入到轉換清單,再按一下 “進階選項”,點選輸入格式為 “Big5”、輸出格式為 “UTF-8”,請注意一定要記得點選 “語文輸出模式:繁體中文”,這樣才會轉換 “許功蓋” 的替換文字。

《按一下可顯示圖片》

確定是 “Big5 > UTF-8 繁體”,點選畫面底下的 “轉換檔案內容” 再按 “開始轉換”:

《按一下可顯示圖片》

轉換好了,總共花了 19 秒左右。在一台 Pentium III-1.0GHz 雙 CPU 的老舊電腦上能跑出這樣的成績算是滿快的了。

《按一下可顯示圖片》

轉換好的 UTF-8 格式檔案會自動放在 “我的文件” 裡面,請先在檔名後面加上 utf8 字樣以便區隔:

《按一下可顯示圖片》

直接用 “記事本” 打開這份文件,然後找一下 “許功蓋” 等字,看看後面的 \\ 或 \ 符號處理好了沒?嗯~果然處理好了! :-)

《按一下可顯示圖片》

不過呢... 我發現如果 “許功蓋” 出現在一行的最後,剛剛的轉換編碼+替換文字的動作會把原本 \r\n 的 Enter 符號破壞掉!變成 r\n,這將會導致 “許功蓋” 結尾的那一行最後,會在網頁上看到多了一個 r!

《按一下可顯示圖片》

這個問題要如何解決呢?其實也很簡單,那就是再轉換一次吧!我特別緻做了另外一個轉換檔:

《按一下可顯示圖片》

檔案內容其實就是把 “功r\n” 的錯誤改回到 “功\r\n”,這樣子就可以更完美的修正,因為前面移除 \\ 與 \ 符號的問題喔~ :lol:

《按一下可顯示圖片》

為了解省各位的時間,我把這兩個轉換 “許功蓋衝碼” 的 .dat 檔放在這裡,你可以點選連結把檔案下載回去:

http://bnwwoo.googlepages.com/big5utf801.dat
http://bnwwoo.googlepages.com/big5utf802.dat

要怎樣使用這兩個檔案呢?其實滿簡單的,在 ConvertZ 的工作列圖示上,按一下右鍵並點選 “程式設定”:

《按一下可顯示圖片》

按 “匯入” 並點選指定的 .dat 檔即可:

《按一下可顯示圖片》

按下編輯就可以在 “詞彙修正表” 這裡修改或新增替換文字:

《按一下可顯示圖片》

這是剛剛第一次執行 \\ 與 \ 轉換的對照表,每次只能選用一種,處理的先後順序不可以相反喔!要先處理 “\\ 與 \” 修正,再處理 “r\n” 的修正!

《按一下可顯示圖片》

這次要做的轉換動作是把 “輸入格式” 的 UTF-8 轉成 “輸出格式” 的 UTF-8,也就是編碼方式不變,但是要記得點選 “繁體中文” 以便取代我們想要修正的文字!

《按一下可顯示圖片》

確定是 “UTF-8 > UTF-8 繁體”,就可以 “開始轉換” 囉~

《按一下可顯示圖片》

轉換時間同樣需要 19 秒左右:

《按一下可顯示圖片》

這就是轉換完畢的 UTF-8 編碼的 MySQL 資料庫檔案!這個檔案可以被 “記事本” 或是 Mac OS X 的 “文字編輯”、BBEdit 等工具直接開啟,而不會看到任何錯誤!

《按一下可顯示圖片》

趕緊找一下剛剛的 “練功r\n”,果然現在被修正為正確的 “練功\r\n”! :lol:

《按一下可顯示圖片》

OK,現在你已經學會怎樣把最重要的 .sql 資料庫從 BIG-5 完美的轉換成 UTF-8,如果你發現轉換之後的資料有亂碼,請檢查原始的 BIG-5 檔案,通常原始檔案裡面就已經是亂碼了!亂碼進、當然亂碼出... >:)

接下來把 BIG-5 網站程式,無論你是使用 phpBB、XOOPS 還是哪一套網站系統,都可以透過 ConverZ 來幫你轉換,只要點選整個目錄並按 “全部加入”,就可以一次轉好整個網站檔案夾!如果擔心轉換程式出錯的話,你也可以下載 phpBB、XOOPS 官方提供的 UTF-8 版本,直接覆蓋取代舊的 BIG-5 程式就行了。只是這麼做的話,要特別留意目前網站使用的程式版本。

如果還在使用舊的 BIG-5 版本,建議你先轉好 .sql 資料庫,並匯入到轉換好的 UTF-8 網站程式,最後再執行升級系統版本的動作。當然,你也可以在轉換網站系統之前,先把 BIG-5 的舊網站程式升級到最新版本,再做轉換 .sql 資料庫編碼語系的動作,最後直接用 UTF-8 新版程式覆蓋舊版。

如果你有自行修改過 phpBB 或 XOOPS 程式碼,就不適合用 “取代舊版程式” 的做法,只能採用升級網站系統的方式。這部份就不在這裡討論了。

進藤ヒカル さん


虛擬画像

作成: 04/28/07 05:11pm
匯入 UTF-8 編碼的資料庫到 MySQL

透過網路上的芳鄰把轉換好的 wusin_test utf8.sql 傳回到 Mac OS X,如果你不會的話,也可以透過 “隨身碟” 等其他儲存設備。

《按一下可顯示圖片》

這次直接用 “文字編輯” 就可以開啟 UTF-8 編碼的 .sql 資料庫囉! :lol:

《按一下可顯示圖片》

我不喜歡用 phpMyAdmin 來管理資料庫,有更直接好用的工具,幹嘛不用呢?請使用 MySQL 提供的 MySQL Administrator 來管理資料庫吧~
先按一下 “Catalogs”,並點選要匯入的資料庫,如果是第一次匯入資料庫,你得先按一下 “+” 號鈕,新增一個 xoops 之類的資料庫,再按一下 “Restore” 工具鈕,這樣子 MySQL Administrator 才會知道你要把 “備份的資料表” 匯入到哪一個資料庫裡?

請按 “Choose File...” 並點選要匯入的資料庫檔:

《按一下可顯示圖片》

要選 “wusin_test utf8.sql” 喔~資料的編碼格式為 UTF-8!

《按一下可顯示圖片》

在正常的情況下,不需要點選 Options 的兩個選項,只要直接按 “Restore Backup” 即可,如果會看到錯誤訊息,很可能是在 phpMyAdmin 匯出資料的時候沒有選好,你可以在 MySQL Administrator 刪除舊的資料庫,重建一個新的資料庫,再重新匯入看看。

《按一下可顯示圖片》

如果有錯誤訊息,一定要想辦法解決,否則資料很可能沒有完整匯入!遷移後的新網站也可能因此無法正常運作!

《按一下可顯示圖片》

正在 Restoring 回存備份的資料庫...

《按一下可顯示圖片》

回存完畢囉!請檢查看看資料表數量是否與舊的資料庫相同?如果有短缺,肯定是前面在 phpMyAdmin 匯出的時候點選了錯誤的選項,該選的沒選,點選了不該選的項目。

《按一下可顯示圖片》

雖然你也可以用 “Ignore SQL errors” 略過 SQL 指令錯誤來匯入資料,不過通常在這種情況下,匯入的資料都不完整!

《按一下可顯示圖片》

總共匯入了 126 張資料表,你可以與 phpMyAdmin 比對看看,是不是同樣的 126 張資料表格?當然囉,這是我們的網站,你的網站會因為安裝的模組不同,資料表數量也不相同。

《按一下可顯示圖片》

再次提醒你,要記得點選 phpMyAdmin 最前面的這兩個重要選項,再匯出資料庫:
■ Add DROP TABLE : 加上刪除資料表指令。
■ Add IF NOT EXISTS :加上檢查資料表示否不存在的指令。

《按一下可顯示圖片》

進藤ヒカル さん


虛擬画像

作成: 04/28/07 05:13pm
最後的檢查工作:比對新、舊網站是否一致?

這是舊的「聞字網」網站:

《按一下可顯示圖片》

這是新的搬家後的「BNW 時尚藝文館」網站,請留意兩個網站的網址不同,但是網頁內容應該幾乎完全相同喔~

《按一下可顯示圖片》

我點選「聞字網」其中的一篇公告網頁,讓你再仔細比對一下:

《按一下可顯示圖片》

接著點選「BNW 時尚藝文館」相同的一篇公告網頁畫面,請比對看看是不是一模一樣呢? :-)

《按一下可顯示圖片》

表面上一模一樣的網站,骨子裡可完全不同喔!我把「聞字網」的 “顯示方式 / 文字編碼” 改成 “Unicode (UTF-8)” 就會看到整個網站通通變成亂碼!必須點選 “預設值” 或是 “繁體中文 (BIG5 HKSCS)” 才能恢復正常。

《按一下可顯示圖片》

同樣的動作,將瀏覽器的 “顯示方式 / 文字編碼” 改成 “Unicode (UTF-8)” ,你會看到「BNW 時尚藝文館」並沒有出現亂碼,反倒是故意點選 “繁體中文 (BIG5 HKSCS)” 的時候會出現亂碼!

《按一下可顯示圖片》

也就是說,我們已經把一個過去以 BIG-5 架設的網站,成功的轉移到新的網址、新的網站、新的資料庫 (資料庫名稱與過去不同),新的 UTF-8 多國語系編碼方式! :lol: :lol:

《按一下可顯示圖片》

現在直接在 “搜尋文章” 輸入 “練功”,找找看剛剛的 “許功蓋” 以及 “r\n” 修正處理,到底有沒有轉換成功?

《按一下可顯示圖片》

嗯嗯~你可以看到這裡的 “練功” 後面並沒有多了一個 \ 反斜線編碼喔!

《按一下可顯示圖片》

而另外一行結尾的 “練功” 同樣 100% 完美!不但後面沒有多餘的 \ 反斜線,也沒有多餘的 r 字元喔~真是太完美、太棒了! :lol: :-)

《按一下可顯示圖片》

其實要感謝的還是 “竹貓”,他們幫我完成了前面的 90%,我只是在後面補上缺少的那 “r\n” 修正的 10% 而已,呵呵~ :lol:

進藤ヒカル さん


虛擬画像

作成: 04/28/07 05:17pm
附錄:將BIG5轉UTF8編碼修正2.dat

代碼: 全部選択
-1,-1,-1,-1,-1,-1 修正前,修正後 么r\n,么\r\n 功r\n,功\r\n 吒r\n,吒\r\n 吭r\n,吭\r\n 沔r\n,沔\r\n 坼r\n,坼\r\n 歿r\n,歿\r\n 俞r\n,俞\r\n 枯r\n,枯\r\n 苒r\n,苒\r\n 娉r\n,娉\r\n 珮r\n,珮\r\n 豹r\n,豹\r\n 崤r\n,崤\r\n 淚r\n,淚\r\n 許r\n,許\r\n 廄r\n,廄\r\n 琵r\n,琵\r\n 跚r\n,跚\r\n 愧r\n,愧\r\n 稞r\n,稞\r\n 鈾r\n,鈾\r\n 暝r\n,暝\r\n 蓋r\n,蓋\r\n 墦r\n,墦\r\n 穀r\n,穀\r\n 閱r\n,閱\r\n 璞r\n,璞\r\n 餐r\n,餐\r\n 縷r\n,縷\r\n 擺r\n,擺\r\n 黠r\n,黠\r\n 孀r\n,孀\r\n 踊r\n,踊\r\n 髏r\n,髏\r\n 躡r\n,躡\r\n 尐r\n,尐\r\n 佢r\n,佢\r\n 汻r\n,汻\r\n 岤r\n,岤\r\n 垥r\n,垥\r\n 柦r\n,柦\r\n 胐r\n,胐\r\n 娖r\n,娖\r\n 涂r\n,涂\r\n 罡r\n,罡\r\n 偅r\n,偅\r\n 惝r\n,惝\r\n 牾r\n,牾\r\n 莍r\n,莍\r\n 傜r\n,傜\r\n 揊r\n,揊\r\n 焮r\n,焮\r\n 茻r\n,茻\r\n 鄃r\n,鄃\r\n 幋r\n,幋\r\n 滜r\n,滜\r\n 綅r\n,綅\r\n 赨r\n,赨\r\n 塿r\n,塿\r\n 縷r\n,縷\r\n 槙r\n,槙\r\n 擺r\n,擺\r\n 箤r\n,箤\r\n 踊r\n,踊\r\n 嫹r\n,嫹\r\n 髏r\n,髏\r\n 潿r\n,潿\r\n 蔌r\n,蔌\r\n 醆r\n,醆\r\n 嬞r\n,嬞\r\n 獦r\n,獦\r\n 佢r\n,佢\r\n 螏r\n,螏\r\n 餤r\n,餤\r\n 燡r\n,燡\r\n 螰r\n,螰\r\n 駹r\n,駹\r\n 礒r\n,礒\r\n 鎪r\n,鎪\r\n 瀙r\n,瀙\r\n 酀r\n,酀\r\n 瀵r\n,瀵\r\n 騱r\n,騱\r\n 酅r\n,酅\r\n 贕r\n,贕\r\n 鱋r\n,鱋\r\n 鱭r\n,鱭\r\n 會r\n,會\r\n 育r\n,育\r\n ﹏r\n,﹏\r\n

hollowaysxp さん


虛擬画像

作成: 04/30/07 05:19am
光哥的轉換方式看了之後大概了解方法了。

我之前也是用phpBB2.0.21 Big5版,資料庫校對瑪是Big5。
轉換方式是把資料庫備份成Mysql 4.0的形式。

然後再把Mysql4.1校對碼改成跟Mysql4.0預設一樣的編碼方式拉丁文。
再把資料庫還原這樣子資料庫就轉變成UTF-8了 :shock:

MySql檔案過大的處理方法

sql上傳資料庫會受到2048kb的限制,

要解決這個問題我使用了2個方法:


(一) 分割 sql :

1. 先下載免費的sql 分割軟體 SQLDumpSplitter.exe
  (下載:載點1 ︱ 載點2 ︱ 載點3)

2. 選2048kb為單位開始分割

3. 分割完成後,由_DataStructure.sql 最先開始上傳,
 接著依照數字遞增上傳至資料庫( _1.sql、_2.sql、_3.sql 以此類推)。


---------------------------------------------------------------------------------------------

如果分割sql 無法解決問題,繼續至第2個方法。

 (二) 更改phpMyAdmin 組態只允許 2MB 的最大上傳限制,修改php.ini中數值: 


 在電腦中搜尋php.ini,進入修改。
 
 
 以下為幾個關鍵設定:


 ‧file_uploads 項目是否設定為On(預設)。
‧upload_max_filesize 為上傳檔案的最大限制,預設為2MB(2M)。
‧post_max_size POST的資料量限制,預設為8M。
‧memory_limit 記憶體限制,預設為8M。


***這3個數值的大小,必須是 memory_limit > post_max_size > upload_max_filesize .


 
‧max_execution_time 每個PHP頁面運行的最大時間值(秒),預設30秒。

‧max_input_time 每個PHP頁面接收資料所需的最大時間,預設60秒 。
 
 
***調這2個time數值是為了上傳sql 時不會因為時間太久而被停止。
 
 
 
修改完這些數值後重新啟動Apache
 
------------------------------------------------------------------------------------


我的case為:上傳400M的sql 到server。


 
我先試著將400M的sql 分割成較小的檔:


將 400M 的sql 以100M 為單位分割

最後分割成4個檔案:x_1.sql、x_2.sql、x_3.sql、xx_1.sql、_DataStructure.sql。


但是無法解決我的問題。

 
 
於是我修改 php.ini:

upload_max_filesize = 100M; 
 
post_max_size = 100M;

max_execution_time = 6000;
 
max_input_time = 6000;
 
memory_limit = 120M;

 
然後重新啟動 Apache

最後依照 
DataStructure.sql 、x_1.sql、x_2.sql、x_3.sql、x_4.sql 的順序上傳。

(其實只要修改php.ini 直接上傳未分割原檔就可以了~

但割都割了就這樣囉~)

2011年7月9日 星期六

處理含 ASCII 92 字元之文字輸入值

Big5 to UTF8

http://xoops.tnc.edu.tw/modules/wfdownloads/singlefile.php?cid=9&lid=23

Big5 資料庫轉成 UTF-8 格式
馬上下載


描述:
免責聲明:

提供它只因為它有用, 但沒有任何擔保, 若有任何意外, 我們不負任何責任.

用途說明:

Big5 資料庫轉成 UTF-8 格式, 且轉換後的許功蓋不會出現 \

適用於 Linux / MySQL 4.x

用法:

請先您的 Big5 編碼的資料庫, 用 phpmyadmin 匯出成一個 sql 檔.

tar xvzf b2u.tar.gz

./bg5-db2-utf8 已匯出的sql檔路徑檔名 新的資料庫名稱 MySQL管理密碼

MySQL 4.0.x 升級至 MySQL 4.1

http://phorum.study-area.org/viewtopic.php?t=29392

由於本來都是使用 MySQL 4.0 的為主要Database..
但是周六在更新我的 Server 的時候(我用 Mandrake Cooker 作為 Server)...
發現,Mandrake 10.2 以後似乎就沒有提供 MySQL 4.0.x 了!!...

所以伺服器在無意間,自動升級到 MySQL 4.1..

由於在 MySQL 4.1 以後,伺服器支援 Database Charset 的資料.但是.....
直接從 MySQL 4.0 升級上來的,所有內容的編碼不變化,但是Database 的編碼設定則是跑成 latin1 的格式....
這樣的話,在 dump資料時沒有指定正確的 charset 或是 mysql client charset 不同的時候,會發生內容錯誤的情況....(也就是很多人說會看到一堆 ??,或是一堆亂碼...)

或許在 client 跟 server 的 charset 都設定唯一樣的時候,取出的資料不會有錯誤(因為 mysql 不會在中間轉碼...)

目前我的做法:
我計劃將資料庫設定編碼都設定為 utf8 ,也就是進入資料庫後的資料都是以 utf8 方式存檔.

先利用 mysqldump --default-character-set=latin1 將資料進行 Dump ...
如此 dump 出來的資料會是正常的..
然後利用編輯器 vim or gedit or ultraedit 等....
修改dump出來的檔案.

將 每個Table 的 Default Charset 改為 utf8 .
同時在 Dump 的資料檔案最前面加上.
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

接著 若你原來的資料是以 utf8 儲存,則不用變動.
若用 big5 存入資料庫的,請利用 iconv -c -f big5 -t utf8 MysqDumpFile.sql 的方式,把內容的編碼轉換成為 utf8 格式.

接著..就把資料表 import 進入資料庫看看囉....
mysql -u root -p DatabaseName < MysqlDumpFile.utf8.sql

註.不建議各位 client Charset = big5 去匯入.
因為有可能會遇到內容有 slashes 的問題(例如許功蓋).一律轉為 utf8 來 Import 進資料庫會比較沒有問題.
_________________

ConvertZ

文章由 yehlu » 2005-08-11 15:53:14
http://toget.pchome.com.tw/intro/network_www/network_www_language/14022.html

ConvertZ 快速方便的繁/簡中文內碼轉換器
ConvertZ 是一個中文內碼轉換器,讓您能輕鬆地對純文字檔案或剪貼簿內容在big5/gbk/unicode/utf-8/jis/shift-jis/euc-jp各種內碼之間自由轉換,解決不同地區因為應用不同編碼而產生的溝通問題。

MySQL 4.1.x 記得要加在 my.cnf 的東西

文章由 yehlu » 2005-08-11 15:56:04
http://blog.dragon2.net/archives/2005/08/08/194.php



如下,不然有些 web app(如 plog 就會哭給你看):
init_connect='SET NAMES utf8′
default-character-set = utf8
default-collation = utf8_general_ci

This entry was posted on 星期一, 八月 8th, 2005 at 1:45 pm and is filed under hacker. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
6 Responses to “MySQL 4.1.x 記得要加在 my.cnf 的東西”

1. ERICJ Says:
八月 8th, 2005 at 2:52 pm

喔喔喔原來可以加在my.cnf阿…
之前修正plog和wordpress的時候,
都是直接加在code裡面…
2. ㄚ凱 Says:
八月 8th, 2005 at 5:22 pm

但是加在 my.cnf 中的前提應該是整個 Server 上的 web app 都是跑 utf8 的話吧…

若Server有人的 phpbb 等跑的是 big5 等其他編碼會不會就掛了?..
3. b6s Says:
八月 8th, 2005 at 5:47 pm

治本的話還是得改程式,有很多 php 程式還停留在 mysql 4.0 時代,表面上說是 UTF-8,但是存進 database 時用的根本是 iso-8859-1…
4. pest Says:
八月 8th, 2005 at 7:39 pm

其實我已經 commit 給 adodb 了,但是它們認為我先前的 patch 要在 _connect() 和 _pconnect() 中多加一個 check, 太花資源, 然後就不鳥我了…
5. clsung Says:
八月 8th, 2005 at 8:45 pm

哦哦,我沒試過別的編碼會不會掛,我現在不用 big5 了….
唉…. 反正見招拆招吧 :p
6. GonDa’s Blog » mysql 4.1 - unicode 編碼- 由 my.cnf 修改 Says:
八月 9th, 2005 at 12:22 pm

[…] 在 Hi! I’m clsung 的 這一篇文

MySQL 語系

http://www.douzi.org/weblog/archives/000075.html

Set Names UTF8;

SHOW VARIABLES LIKE 'character_set_%';

SHOW VARIABLES LIKE 'collation_%';

my.cnf

文章由 yehlu » 2005-08-15 11:22:48
[mysqld]
default-character-set=utf8
default-collation=utf8_bin
init_connect='SET NAMES utf8'

[client]
default-character-set=utf8

Re: my.cnf

yehlu 寫:[mysqld]
default-character-set=utf8
default-collation=utf8_bin
init_connect='SET NAMES utf8'

[client]
default-character-set=utf8


MySQL 5.0
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8

MySQL Big5轉utf8及亂碼問題解決

資料來源:http://www.codecharge.com.tw/phpBB3/viewtopic.php?f=11&t=715&start=0
1、MySQL 新版的變化:
MySQL 4.1 以後對多語言的支持有了很大變化 (這也導致了許多問題的出現);儘管大部分的地方,MySQL 3 仍然占主導地位;但 MySQL 4.1 是 MySQL 官方推薦的數據庫,(截自目前MySQL己出到了5.2.2),已經有主機提供商開始提供並將會越來越多; 許多 PHP 程序以 MySQL 作為默認的數據庫管理軟件,但它們一般不區分 MySQL 4.1 以上與 4.1 以下版本的區別,籠統地稱「MySQL 3.xx.xx 以上版本」就滿足安裝需求了; 因為 latin1 在許多地方 (下邊會詳細描述具體是哪些地方) 作為默認的字符集,成功的蒙蔽了許多 PHP 程序的開發者和用戶,掩蓋了在中文等語言環境下會出現的問題;簡單的說,MySQL 自身的變化和使用 MySQL 的 PHP 程序對此忽略,導致了問題的出現和複雜化,而由於大部分用戶使用的是英文,使得這種問題不被重視。但在中文環境使用下因而產生了許多的問題。
2、MySQL 4.1 字符集支持的原理:
MySQL 4.1 對於字符集的指定可以細化到一台機器上安裝的 MySQL,其中的一個數據庫,其中的一張表,其中的一欄,應該用什麼字符集。但是,傳統的 Web 程序在創建數據庫和數據表時並沒有使用那麼複雜的配置,它們用的是默認的配置,那麼,默認的配置從何而來呢?
編譯 MySQL 時,指定了一個默認的字符集,這個字符集是 latin1;
安裝 MySQL 時,可以在配置文件 (my.ini) 中指定一個默認的的字符集,如果沒指定,這個值繼承自編譯時指定的;
啟動 mysqld 時,可以在命令行參數中指定一個默認的的字符集,如果沒指定,這個值繼承自配置文件中的;
此時 character_set_server 被設定為這個默認的字符集;
當創建一個新的數據庫時,除非明確指定,這個數據庫的字符集被缺省設定為 character_set_server;
當選定了一個數據庫時,character_set_database 被設定為這個數據庫默認的字符集;
在這個數據庫裡創建一張表時,表默認的字符集被設定為character_set_database,也就是這個數據庫默認的字符集;
當在表內設置一欄時,除非明確指定,否則此欄缺省的字符集就是表默認的字符集;
這個字符集就是數據庫中實際存儲數據採用的字符集,mysqldump 出來的內容就是這個字符集下的;
簡單的總結一下,如果什麼地方都不修改,那麼所有的數據庫的所有表的所有欄位的都用 latin1 存儲,不過我們如果安裝 MySQL,一般都會選擇多語言支持,也就是說,安裝程序會自動在配置文件中把 default_character_set 設置為 UTF-8,這保證了缺省情況下,所有的數據庫的所有表的所有欄位的都用 UTF-8 存儲。
當一個 PHP 程序與 MySQL 建立連接後,這個程序發送給 MySQL 的數據採用的是什麼字符集?MySQL 無從得知 (它最多只能猜測),所以 MySQL 4.1 要求客戶端必須指定這個字符集,也就是 character_set_client,MySQL 的怪異之處在於,得到的這個字符集並不立即轉換為存儲在數據庫中的那個字符集,而是先轉換為 character_set_connection 變量指定的一個字符集;這個 connection 層究竟有什麼用我不大明白,但轉換為 character_set_connection 的這個字符集之後,還要轉換為數據庫默認的字符集,也就是說要經過兩次轉換;當這個數據被輸出時,又要由數據庫默認的字符集轉換為 character_set_results 指定的字符集。
以一個典型的環境為例,電腦上安裝著 Apache 2,PHP 5 和 WordPress 1.5.1.3,MySQL 配置文件中指定了 default_character_set 為 utf8。於是問題出現了:
WordPress 按照默認情況安裝,所以所有的表都用 UTF-8 存儲數據;
WordPress 默認採用的瀏覽字符集是 UTF-8 (Options->Reading 中設置),因此所有 WP 頁面的 meta 中會說明 charset 是 utf-8;
所以瀏覽器會以 utf-8 方式顯示所有的 WP 頁面;這樣一來 Write 的所有 Post,和 Comment 都會以 UTF-8 格式從瀏覽器發送給 Apache,再由 Apache 交給 PHP;
所以 WP 從所有的表單中得到的數據都是 utf-8 編碼的;WP 不加轉換的直接把這些數據發送給 MySQL;
MySQL 默認設置的 character_set_client 和 character_set_connection 都是 latin1,此時怪異的事情發生了,實際上是 utf-8 格式的數據,被「當作 latin1」轉換成……居然還是轉換成 latin1,然後再由這個 latin1 轉換成 utf-8,這麼兩次轉換,有一部分 utf-8 的字符就丟失了,變成 ??,最後輸出的時候 character_set_results 默認是 latin1,也就輸出為奇怪的東西了。
3、PHP 程序與 MySQL 建立連接:
所以為了解決這些問題,在PHP 程序與 MySQL 建立連接時,於query 之前先執行:
SET character_set_client=’utf8′
SET character_set_connection=’utf8′
SET character_set_results=’utf8′
如上三列編碼都一樣時,可寫成 SET NAMES ‘utf8′
上面3個變量的作用是這樣的,client表示客戶端發送過來的字符集,results表示發送到客戶端的字符集(這兩個分開是因為發送過來和發送過去的不一定是同一個客戶端),connection則在客戶端和數據庫起一個連接作用。
如果是租用網路伺服器,首先測試服務器MySQL資料庫是否 >= 4.1,編譯時是否加入了 UTF-8 支持;然後測試數據庫以什麼格式存儲 ($dbEncoding);
SET NAMES $dbEncoding 。
4、MySQL資料庫big5轉utf8:
步驟一:首先把資料dump出來
由於先前用4.0時我的資料是存成latin1,所以dump出來後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上-default-character-set=latin1
#mysqldump -u帳號 -p -default-character-set=latin1 資料庫 >output.sql
步驟二:big5轉成utf8
如果原先是Big5的資料, dump出來後就直接把Big5轉成UTF-8即可
#piconv -f big5 -t utf8 output.sql >utf8.sql
如果原先是UTF-8的資料,像是wordpress,dump出來後要先轉成Big5後,再把他轉成UTF-8,因為原先dump出來的是偽裝成UTF-8的lantin1不是真正的UTF-8
#mysqldump -u帳號 -p -default-character-set=latin1 資料庫 >output.sql
#piconv -f utf8 -t big5 output.sql > big5.sql
#piconv -f big5 -t utf8 big5.sql >utf8.sql
步驟三:修改sql檔
1、修改轉成的sql檔中所產生的‘’\”及換行
的問題(有時換行時會成‘\n’)
2、在dump出來的sql檔最前面加上:
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
再來把每個資料表後面的TYPE=MyISAM;
改成DEFAULT CHARSET=utf8;
步驟四:建立新的資料庫
方法1. SQL語法
CREATE DATABASE `abc` DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;
方法2. 用phpMyAdmin建立資料庫的,建立時”校對”要選utf8_general_ci
步驟五:import資料
方法1. SQL語法
#mysql -u帳號 -p 資料庫 < utf8.sql
方法2. 直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可。不過使用phpMyAdmin import 有檔案大小的限制,可先把sql檔分成幾個檔案。
方法3.用Webmin import (我即是用此方法,如滙入不成功還可知在那一行的sql出問題,因有時在轉成utf8時有些因‘許功蓋’會產生一些‘\’)
最後記得檢查看MySQL的my.cnf設定檔內要加入以下設定
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci