茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1735209 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_00011.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2008/3/19 6:34:51
MySQL 5 使用 UTF-8 配合 WordPress 的問題

果然「Ignorance is a bliss」。不知道、不清楚、不明白、不去碰它,就不會有問題。一研究,才發現原來問題那麼多。這邊先筆記以下,改天繼續。

MySQL 編碼方面

目前發現 MySQL 5.0.11-beta 裡用的都是 latin1。目前心得是依照這個步驟改:

  1. 用 mysqldump -default-character-set=latin1 來備份所有資料庫(確認過用這個丟出來的檔案,可以直接用 Vim 與 EmEditor 當成 UTF-8 開啟,中文都正常顯示)
  2. 把各資料庫刪除(也就是 WordPress……當然系統方面的東西不碰他)
  3. 把備份資料庫丟回去

不過不確定可行,所以還沒做。最終目標是全 UTF-8 的資料庫後端,所以還得改 my.cnf──但是我就是找不到這個檔案在哪裡呀!


MySQL 編碼問題更新

終於完成了(我用 FreeBSD 5.3 + MySQL 5)。問題簡單來說,就是 MySQL 預設內部是用 latin1 處理資料,所以外表看似 UTF-8 的 WordPress 站實際資料卻並非純正 UTF-8。用 mysqldump 看就會發現全都是亂碼,直接在 mysql 裡 SELECT 出來的也全是亂碼。

  1. 先進 mysql 看編碼:
      mysql> show variables like '%character%'; 
    ,都是 latin1 的話就要改
  2. 備份 WordPress:
      mysqldump -u root -p --default-character-set=latin1 --add-drop-table 資料庫名稱 > 備份檔名稱 
  3. 把資料庫編碼改過:
      mysql> ALTER DATABASE DEFAULT CHARACTER SET utf8; 
  4. 修改
      /etc/my.cnf 
    ,加入:

    			[mysqld]
    			default-character-set=utf8
    			[mysql]
    			default-character-set=utf8
    

  5. 重新啟動 MySQL:
       /usr/local/etc/rc.d/mysql-server.sh restart 
  6. 先備份一份剛才的資料庫備份檔,然後手動編輯把裡面的 latin1 改成 utf8;一個是最開頭的「SET NAMES latin1」,再來就是建立每個表格時的「ENGINE=MyISAM DEFAULT CHARSET=utf8;」
  7. 改好之後把資料庫送回去:
       mysql -u root -p 資料庫名稱 < 改過的備份檔案名稱 

  8. 最後,如果是用 root 或其他 SUPER 權限帳戶存取 MySQL 的話,還得修一下 WordPress 的 wp-includes/wp-db.php,在連接資料庫後自己 set names:搜尋
       $this->select($dbname);  
    然後在前一行加入
       mysql_query("SET NAMES 'UTF8'");  
    即可。( clsung 說:「 具有 SUPER 權限的人,加在 my.cnf 是沒用的 。」我想大概只要另外給一個使用者供 WordPress 專用,就不用修 wp-db.php 了吧……話說回來,只因為懶得研究如何新增使用者、授予權限,就讓 WordPress 一直用 root 去連 MySQL,我也實在是太沒警戒心了。)
  9. 如果出問題,可以從備份還原:
       mysql -u root -p 資料庫名稱 < 備份檔名稱 

如此就大功告成了,從裡到外每一環節都是 UTF-8,在 mysql 裡直接 SELECT 出來的也都是正確的 UTF-8 中文了。總共兩天的時間,加起來花了好幾個小時,雖然有點累,但也成果豐碩,學了不少東西。這種滿足感,可是玩 Windows 很少有的。

內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|