對這文章發表回應
發表限制: 非會員 可以發表
現在多數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的數據庫不向下兼容,所以升級的時候要三思啊。