明明去年做了一次, 今年又有些陌生了, 還是得記錄下來.
因為要更換虛擬主機, 原本的網站是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。