計畫了很久一直想要把網站的 Big-5 編碼改為 UTF-8 的編碼,
不過遲遲沒有進行動作,
花了很久的時間終於全部轉換完成,
這個成功轉換的經驗想要將其記錄下來。
- 將 *.htm *.html *.php 文字轉換為 UTF-8
使用 ConvertZ 軟體轉換為 UTF-8 格式文件
移除的時候不選擇加入 BOM 標頭
- 建立資料庫備份及創立 UTF-8 資料庫
登入 mysql 主機
bash# mysqldump -u USER -p DBNAME > FILENAME.sql
得到檔案後這個檔案為最原始的資料庫 *.sql 檔案
在新建一個 DBNAME_utf8 為之後將轉入的資料創建資料做好新家
此時可以直接使用作為測試此檔案是否正常
bash# mysql -u USER -p DBNAME_utf8 < FILENAME.sql
發現有錯誤的話檢查此檔案內容檢查後發現 table 的名稱出現問題
在新建 table 的時候若使用 DATE, TEXT 之類的保留字 必須使用 `DATE` 這種形式
但是在 mysqldump 時並不會加上 ` .... ` 這種符號 在之後 mysql 匯入的時候也許會發生問題
這時可以使用 phpmyadmin 管理程式輸出只有表格樣式的 SQL 字串
並將 SQL 字串匯入 DBNAME_utf8 資料庫新家
#Tips:
其實在 MySQL 的 4.1 版本後可以在建立 table 的時候設定資料儲存為 UTF-8 編碼
但這邊我使用的平台為 3.23.xx 版本
所以其實儲存資料格式都還是為 latin-1 格式
- 針對 MySQL DB Big-5 > UTF-8
儲存的 FILENAME.sql 為 UNIX 編碼 Big-5 類型
必須先解決 許功蓋 的字元衝碼問題
用編輯器取代 許\ -> 許, 功\ -> 功 這樣全部取代後
並轉碼為 UTF8-UNIX 執行
bash# mysql -u USER -p DBNAME_utf8 < FILENAME.sql
成功的話就算順利的完成了這個轉換的過程
※很可惜的是哇沙米向來要做什麼都沒這麼順利= =
- 問題與解決
A. BOM 標頭造成 session, cookie HEADER 異常
BOM 若造成 session 互換的問題必須修改 php.ini 改 output_buffering = 4096 即可
B. 網頁編碼依然 Big-5 不是 UTF-8 編碼
檢查 Apache 的 httpd.conf 內 AddDefaultcharset utf-8
檢查 php.ini 內 default_charset = "UTF-8"
C .神奇的 "里" -> "裡"
用 ConvertZ 轉換 UTF-8 時的 "里" 會很神奇的被轉成 "裡"
這目前只能手動修正而且好像也沒發現別的字
D . MySQL 的欄位內容必須加大
根據統計 UTF-8 編碼比 Big5 還必須多上一些
所以欄位的大小若是設定的剛剛好會用滿的中文欄位
就必須要加大欄位大小
到這裡若解決所有的問題就算大功告成了
寫的蠻簡要的主要只是想要將來能回頭看轉換程序需要注意些什麼
不算是教學的文章
轉換這整個程序真的比想像中的還要辛苦
因為許多必須要克服的問題
讓我深深地覺得現在這個年頭果然還是什麼都可以在網路上查到阿
常常遇到一些不懂得怎麼查資料的總是會說查不到
但是其實只要有「心」(當然還需要一點技巧)
什麼問題都可以解決
當做一件事情遇到種種困難而找到方法克服而去解決的時後
那種成就感就真的是無可取代的