將網站含資料庫轉 UTF-8 心得

計畫了很久一直想要把網站的 Big-5 編碼改為 UTF-8 的編碼,
不過遲遲沒有進行動作,

花了很久的時間終於全部轉換完成,

這個成功轉換的經驗想要將其記錄下來。


  1. 將 *.htm *.html *.php 文字轉換為 UTF-8
    使用 ConvertZ 軟體轉換為 UTF-8 格式文件
    移除的時候不選擇加入 BOM 標頭

  2. 建立資料庫備份及創立 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 格式

  3. 針對 MySQL DB Big-5 > UTF-8
    儲存的 FILENAME.sql 為 UNIX 編碼 Big-5 類型
    必須先解決 許功蓋 的字元衝碼問題
    用編輯器取代 許\ -> 許, 功\ -> 功 這樣全部取代後
    並轉碼為 UTF8-UNIX 執行
    bash# mysql -u USER -p DBNAME_utf8 < FILENAME.sql

    成功的話就算順利的完成了這個轉換的過程
    ※很可惜的是哇沙米向來要做什麼都沒這麼順利=  =

  4. 問題與解決
    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 還必須多上一些
    所以欄位的大小若是設定的剛剛好會用滿的中文欄位
    就必須要加大欄位大小


到這裡若解決所有的問題就算大功告成了
寫的蠻簡要的主要只是想要將來能回頭看轉換程序需要注意些什麼
不算是教學的文章

轉換這整個程序真的比想像中的還要辛苦
因為許多必須要克服的問題
讓我深深地覺得現在這個年頭果然還是什麼都可以在網路上查到阿
常常遇到一些不懂得怎麼查資料的總是會說查不到
但是其實只要有「心」(當然還需要一點技巧)
什麼問題都可以解決

當做一件事情遇到種種困難而找到方法克服而去解決的時後
那種成就感就真的是無可取代的

留言

Copyright All Rights Reserved https://wsmwason.com 2000-2021, Powered by wsmwason