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

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_G9_00015.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

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

發表者: 冷日 發表時間: 2008/3/19 6:33:43
MySQL 4.1x 中文亂碼問題

現在多數host裝的還是 MySQL 4.0x 版本以下,如果升級到了4.1x 或者移動到使用4.1x 的主機上,估計會遇到一些問題。我在powweb上遇到了兩個問題。

一是數據導入。在phpMyAdmin內導入後,發現中文變成了亂碼。搜索學習後,瞭解到需要設置數據庫的collation (校勘),如果你的數據庫是utf-8的,設置為utf8_general_ci就可以了。

二是,即使正確導入了,在phpMyAdmin裡也能正確顯示,但WordPress頁面上顯示的文章內容都是「???」,而模板裡面的漢字都能正常顯示。這讓我頭疼了很久。搜索到 Windix’s Weblog 上有對此的說明:

從MySQL 4.1開始引入的多語言支持確實很棒,而且一些特性已經超過了其他的數據庫系統。不過我在測試過程中發現使用適用於MySQL 4.1之前的PHP語句操作MySQL數據庫會造成亂碼,即使是設置過了表字符集也是如此。我讀了一下新的MySQL在線手冊中第十章” Character Set Support 最後終於找到了解決方法並測試通過。

MySQL 4.1的字符集支持(Character Set Support)有兩個方面:字符集(Character set)和排序方式(Collation)。對於字符集的支持細化到四個層次: 服務器(server),數據庫(database),數據表(table)和連接(connection)。

當我們按照原來的方式通過PHP存取MySQL數據庫時,就算設置了表的默認字符集為utf8並且通過UTF-8編碼發送查詢,你會發現存入數據庫的仍然是亂碼。問題就出在這個connection連接層上。解決方法是在發送查詢前執行一下下面這句:


SET NAMES `utf8`;

但是我依舊不知道,如何,在何處讓WordPress運行這個SQL語句。後來在 阿修的部落格 上查到辦法:

為著解決這個問題必須去修改wp-includes/wp-db.php內的資料連線設定。詳細的修改方式是這樣的:

 
$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
//?#91;上下面這行
$this->query("SET NAMES 'utf8'");

這樣子終於能正常顯示中文的WordPress了。雖然後來 還是沒用Powweb ,但是覺得這個經驗會對別人有用。記得有人用email和我討論過這樣子的中文顯示問題,但是我那時哪裡知道問題出在MySQL 4.1x上。

還有,4.1x的數據庫不向下兼容,所以升級的時候要三思啊。

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












 [詳情...]
validation picture

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

選項

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