明明去年做了一次, 今年又有些陌生了, 還是得記錄下來.

因為要更換虛擬主機, 原本的網站是big5編碼的中文PHP網頁 + MySQL 5.1 latin1編碼的資料表, 新的虛擬主機的MySQL已經不支援latin1, 只得動手轉換。

因為是很簡單的網站, 會動到MySQL資料庫的其實只有一張簡單的線上訂購表。

網路上查MySQL的中文編碼轉換, 會查到一堆訊息, 其中有的還提到要寫程式轉碼, 個人覺得有些麻煩, 還是用土法煉鋼來處理。

※作業環境是Windows 7

作法:

一、MySQL資料庫導出及匯入

1.從原本的MySQL將資料庫(資料表)匯出:用的只是簡單的PhpMyAdmin工具。

2.把匯出的mysql檔案用「記事本」打開(對! 就是記事本就好),看到裡面資料是正常顯示的中文,在最前面加上這兩行:

SET NAMES 'utf8';
SET CHARACTER SET 'utf8';

3.然後用「另存新檔」,選擇編碼為「UTF-8」把檔案回存為utf8的編碼。

這時檔案已經變成了UTF-8編碼的MySQL資料庫匯出檔。

 

二、將網頁改為utf8編碼:

1.用「記事本」把網頁的PHP檔打開,然後回存城UTF-8編碼的檔案。(對! 還是記事本)

2.一個一個檔案依序存城UTF-8的檔案。(....檔案不多所以這樣處理)

三、修改讀取MySQL的PHP程式:

1.因為讀取跟寫入MySQL的PHP網頁都會去include同一個設定檔,所以修改該設定檔即可,將該設定檔加上下列幾行:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET=utf8");
mysql_query("SET CHARACTER_SET_CLIENT=utf8");
mysql_query("SET CHARACTER_SET_RESULTS=utf8");

2. 我的整個資料庫設定檔的內容變成這樣:

<?
$database="資料庫名稱";
$db=mysql_connect("localhost", "資料庫使用者", "密碼");
mysql_select_db($database,$db);
$http_host="www.abc123xyz.tw";
$root="abc123xyz.tw";
$lifetime=time()+3600;
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET=utf8");
mysql_query("SET CHARACTER_SET_CLIENT=utf8");
mysql_query("SET CHARACTER_SET_RESULTS=utf8");

?>

四、測試線上訂購的功能。

1.此時寫入資料庫已經正常。

五、後遺症的處理:

1.因為使用記事本去讀寫php檔,把big5改成UTF-8,所以有時會出現副作用,就是出現header已經送出的情形,這是因為記事本在檔案的最前面同時寫入UTF-8的標記(BOM)的關係。

2.我的解決方式是,找出那個預先送出header的檔案,用Dreamweaver打開,回存時取消BOM標記的勾選。(...是懶了一點,不過很有效)

 

不過記事本對於big5的「許公蓋」之類的應該是不會去處理,但如果資料量不多, 這是很簡單的處理方式。 

就這樣,省掉了什麼轉換程式有的沒的,就把MySQL+PHP從big5轉換成了utf8。

 

arrow
arrow
    全站熱搜

    Jikky 發表在 痞客邦 留言(1) 人氣()