用 Google 搜尋:

無聊人的無聊故事

一月 30 日, 2006

更改 MySQL 資料庫編碼的方法

文章類別:Server 相關, WordPress 相關, 電腦相關 — by C.H.Weng @ 10:20 下午

這幾天因為備份 WordPress 資料庫的問題,搞得很頭大。

明明就可以匯出 .sql 資料檔,也可以用 EmEditor 之類的文字編輯軟體正確瀏覽,但是倒回資料庫後,偏偏中文字的部分全變成了問號,就算是直接複製整個 .sql 檔的內容,直接貼回 phpMyAdmin 去,一樣是不正確的結果。

這顯然是編碼出了問題,但是過程中我確定所有檔案都是 UTF-8 編碼,連整個部落格系統也都是呀,怎麼會這樣呢?上網找了半天,終於解決問題了,其實說穿了問題的關鍵很簡單,但之前就是沒想到。剛剛在討論區上看到有人有類似的問題,於是順便紀錄一下我的解決方法,希望給有類似麻煩的人一點參考。

其實,初玩 MySQL 資料庫的人,設定上應該滿容易忽略掉一個地方,就是 my.ini 裡面的 default-character-set 與 default-character-set 這兩個設定值,它們的預設值都是 latin1。雖然說這個設定與用到資料庫的軟體(如 WordPress)的設定並不一定要一樣,在大多數情況下也不一定會出問題,但是遇到備份資料,或是某些特殊字元,可能就會有問題了。因此,為了保險起見,還是建議大家,可以的話還是盡快修正這個問題吧!

不多說,以下是我的解決方法,當然是要搭配 phpMyAdmin 一起服用的喔。

  1. 首先,為了防止搞砸,我們先將整個資料庫所在的目錄備份起來,這樣萬一弄壞了,直接把這些檔案覆蓋回去就可以恢復原狀了。
  2. 然後,我們先從 phpMyAdmin 中(使用 WordPress 的話,內建的備份 Plugin 也可以。)將待修正的資料先匯出成 .sql 資料檔(如果是匯出成有壓縮的格式,就自己解壓縮即可。)。
  3. 接著,用純文字編輯軟體開啟 .sql 檔,如果有亂碼的話,記得先將編碼調為 UTF-8 再重新開啟就會正常了。
  4. 在文字編輯軟體中,用 utf8 字串取代掉所有的 latin1 字串,然後存檔。記得編碼都要是 UTF-8 喔!
  5. 另外,再開啟 MySQL 主程式資料夾中的 my.ini,找到 default-character-set 與 default-character-set 這兩個設定值(預設都是 latin1),並改為 utf8 後存檔。
  6. 重新啟動 MySQL 服務。
  7. 回到 phpMyAdmin 介面中,將待修正的資料表全部清空。
  8. 接著將資料庫與資料表的文字編碼校對都改為 utf8_general_ci。
  9. 最後匯入正確的 .sql 資料檔,這樣就大功告成囉!

以前我直接在 phpMyAdmin 中觀看資料表的內容,發現中文字的部分全部都是亂碼,還想說是 phpMyAdmin 的問題。不過經過這次修正,這個問題也一併解決掉了,真是可喜可賀!

操作細節部分就不贅述,如果有問題再來發問就好。今天課就上到這裡,下課啦~

共有 9 條評論

  1. 做得不是好好.

  2. 我也想解決這個問題, 我也是用wordpress的, 想把latin1 轉為 utf8

    請問如何用 utf8 字串取代掉所有的 latin1 字串??

  3. 不好意思,這邊我沒說清楚。

    我指的是,搜尋整個文件中的 CHARSET=latin1 這個字串,並以 CHARSET=utf8 取代之,然後記得存檔。

    如果文件中還有其他設定為 latin1 的部分,請記得要全部都改成 utf8,這樣重新匯入的時候才會以正確的編碼形式來建立資料庫的內容。

  4. 謝謝你的回覆,我已解決到問題了

    分享一下我的做法︰
    1. 我沒有改 my.ini 的 charset
    2. 但在 /wp-includes/wp-db.php 找 $this->select($dbname);
    然後在前面加入 $this->query(”SET NAMES ‘utf8′”); 便可以了!!

    十分開心了,在phpMyAdmin可以看到中文了

  5. 這也是方法之一,不過缺點就是必須動到 WordPress 核心程式。每次升級的時候,都要記得去修改一下程式碼才行。

  6. 您好,我也是最近才將blog由舊server轉到新server上。但是一切轉移完之後,原本的中文卻都顯示亂碼。

    我照文中的方法試過,把備份的 sql 中所有的CHARSET=latin1 這個字串以CHARSET=utf8 取代之。但還是照常是亂碼。

    可是我從 myphpadmin 上看到table 的資料 Collation都顯示是utf8_general_ci,這樣的話問題可能會是因為哪個設定出問題呢?

    對於技術上的東西我真的不太熟,所以看了你的教學文章感覺獲益良多。 不好意思,第一次留言問題有點多。

    謝謝!!

  7. 請試試看這邊提到的方法吧:安裝WordPress亂碼問題

  8. 我是直接另外裝舊版的 phpMyAdmin XD

  9. 謝謝分享,終於可以正常顯示中文了!感謝!新年快樂~

發表評論

(必須輸入。)
(必須輸入,但不會公開。)
(選擇性輸入、公開資訊。)

不可以 使用 HTML 標籤;你 可以 使用 BBCode 標籤。
目前支援的標籤: b color email i img size strong u url。

Comment Preview
↑Meta↑
↑Authors↑
↓Search↓
↑Categories↑
↑Recent Posts↑
↓Most Popular Posts↓
↑Recent Comments↑
↓Recent Trackbacks↓
↓Archives↓
↓Themes↓
Powered by WordPress™
Valid RSS & Atom Feed