wordpress 1.5升級注意事項 – 中文亂碼篇
*中文亂碼
大部份人升級wordpress 1.5時碰到的問題都是中文亂碼,尤其是如果原本用 mysql 4.0 而同時要升級到 mysql 4.1的話。
主要原因是mysql 4.1在語系方面增加了許多功能,它可以設定語系的層次從最底層的 server, database 到單一 table, column, connection 都可以設定,而除了語系之外,還可以指定搭配不同的 collation,所以組合百百種,只要一個錯了就難逃亂碼的命運。(而之前用mysql 4.0為何不用設定也不會出問題呢?主要原因是那時預設是 latin-1,正好相容大部份的utf-8字元,所以不常碰到亂碼)
所以如果你的情況跟我一樣,同時要將 wordpress 從 v1.2升級到 v1.5, 然後mysql也要 v4.0 升級到 v4.1 的話,請看下面流程:
0. 先進phpmyadmin找到可輸入 sql query的畫面,然後鍵入:
show variables like ‘%character%’;
這句話會顯示目前資料庫使用的語系設定,一般國外的網站或剛裝好的 mysql 4.1預設都是 latin-1。
1 新增wordpress blog要用的database名稱,例如 myblog.
如果你熟悉 phpmyadmin 的操作,在畫面上就可以選擇這個新database 要用的語系,
charset 請選擇 UTF-8 Unicode (utf8)
collation 請選擇 utf8_general_ci (ci 代表 case insensitve 大小寫沒差)
2、改 database語系,同樣在 phpmyadmin 的query畫面鍵入下面兩行:
如果你在上一步中沒正確選擇語系,或是在看到本文前已經先建好database了也沒關係,用下面語法可以改回來
alter database myblog
character set utf8;
3、匯入舊的 sql
到這裏為止mysql裏面已經有一個 utf-8的 database, 可以準備倒資料進去了,把舊版的sql 文字檔直接copy-paste或上傳到 phpmyadmin即可。注意要告訴phpmyadmin這個文字檔是 utf-8 編碼的才能正確匯入。
根據我的經驗,總是會有一兩個小地方出問題,可能要手動修改一下內容,例如將某些中文字先換成英文,等倒進mysql後再進wordpress 改回來。
4、改 wp-db.php 的設定
前面曾經提過,mysql的語系設定是多層次的,前面我們把database與table的語系都設定正確,但程式與mysql連線時的語系則是由 connection 來決定,這部份就要改wordpress的程式碼,在 \wp-includes\wp-db.php 的第 44行加上:
$this->query(“SET NAMES ‘utf8′”);
這句話會同時設定 client, results, connection三者使用的語系為 utf-8。
*最後檢查是否全部改成 utf-8
show variables like ‘%character%’;
此時你應該會看到大部份欄位都是utf-8了,除了 server 這項之外,因為我是用別人的hosting主機,所以沒法兒改這部份,但平常做案子時大部份都可以直接控管mysql,此時就可以用 my.ini 設定:
[mysqld]
default-character-set=utf8
告訴mysql server啟動時要用 utf-8即可。
附帶一提,經過這樣調校的mysql,連接 flash – amfphp – php – mysql 也完全沒問題,可以互傳中文/日文。


22 Comments Add your own
1. YJ&hellip | August 12th, 2005 at 8:57 pm
您好:
您的網站教學範例寫的很好!讓我受益良多!但是我在透過amfphp要insert資料到mysql時卻發生了問題,我可以正常寫入資料,但因為資料內容有中文,想要瀏覽時卻會出現亂碼(select *from table_name)
我的執行環境如下:
flash mx 2004 pro(英文版)
amfphp ms2
php 5
mysql 4.1
apache2
phpmyadmin 2.6.2
我在phpmyadmin 執行
show variables like ‘%character%’;
所有的設定都是utf8
但是還是有亂碼的出現,在service資料夾中的php擋案是不是還要加上
$this->query(”SET NAMES ‘utf8′”);我試過了!
但是還是沒辦法正常顯示中文!!
請問我應該如何做!!謝謝!!
2. jeremy&hellip | August 13th, 2005 at 1:39 am
>show variables like ‘%character%’;
>所有的設定都是utf8
照這個情況來看,你的設定都是正常的,只有一個地方可能出錯,請確定一下service資料夾中的php class檔案本身文字編碼是否也是utf8。
可以用dreamweaver, EmEditor或任何可設定語系的editor打開看一下,有可能它還是big-5 or latin-1。
我懷疑是php -> mysql 這段出了問題,mysql預期接收到的資料是 utf8, 但前端php傳來的資料卻是其它語系。
>$this->query(”SET NAMES ‘utf8′”);我試過了!
這句只有在你沒法改mysql設定檔時才需要用,一般如果mysql是自已管,直接改 my.ini or my.cnf 就可以了。
3. None » 目前在Dre&hellip | August 14th, 2005 at 12:34 pm
[...] 參照這篇wordpress 1.5升級注意事項 – 中文亂碼篇的說明 用show variables like ‘%character%’;查詢的結果 [...]
4. == i POP Focus == »&hellip | August 21st, 2005 at 12:34 am
[...] 2)另外找到一些说明中文乱码的问题,还是没用,因为那是wordpress 1.2 to 1.5的办法. 而我已经是1.5了. 系统情况是mysql 4.1.11 +windows 2000 server + phpmyadmin 2.6.2 +php 5.0.4 win32 Some Posts: http://www.eqiao.com/?p=81 http://ria.richtechmedia.com/?p=192 http://yanfeng.org/wp/232 http://blog.csdn.net/yzhz/archive/2005/04/08/340166.aspx http://www.shunz.net/node/278 [...]
5. popf&hellip | August 21st, 2005 at 12:43 pm
简直是打击!
由于建立blog数?库的时候,就没把设置?对.
CHARSET=latin1
ENGINE=InnoDB
整? =latin1swedishci .
?新导出/导入数?库,使整个blog的中文?到摧?性伤害!
本?想通过 mysql 4.1.X 中文乱?解决办法去?定的,结果还是?行!
类似如上这样的,会有一些?号出现
http://ipopf.info/wp/index.php/2005/08/19/251
只有用latin1,书写进去,中文才显示正常,而导出了,再导入就不行了,我试着把数据库以gb2312/utf8等建立,然后导进表,但都失败了.
6. R » Blog Archive &r&hellip | August 27th, 2005 at 5:04 am
[...] […] 2)另外找到一些?明中文??的??,?是?用,因?那是wordpress 1.2 to 1.5的?法. 而我已?是1.5了. 系?情?是mysql 4.1.11 +windows 2000 server + phpmyadmin 2.6.2 +php 5.0.4 win32 Some Posts: http://www.eqiao.com/?p=81 http://ria.richtechmedia.com/?p=192 http://yanfeng.org/wp/232 http://blog.csdn.net/yzhz/archive/2005/04/08/340166.aspx http://www.shunz.net/node/278 […] [...]
7. ??脩????????閮?銝剖? &hellip | November 19th, 2005 at 7:37 pm
[...] 1.先用phpmyadmin新增一個wordpress專用的資料庫,本例中我們命名為wordpress 記得需將charset設定成utf8_general_ci,請參考亂碼問題 [...]
8. None » 資料庫語&hellip | December 3rd, 2005 at 10:44 pm
[...] 長久以來在 DreamHost 這邊用的 Mysql DB 語系一直是 latin1,一直沒試試看改用utf8,昨晚參考MySQL 5 使用 UTF-8 配合 WordPress 的問題(附帶浮動 CSS 之謎)和wordpress 1.5升級注意事項 – 中文亂碼篇測了一下似乎還滿正常的,所以剛剛終於把這邊的DB語系換成utf8了。 [...]
9. 天地網誌 » Blog&hellip | May 11th, 2006 at 4:39 pm
[...] http://ria.richtechmedia.com/?p=192 [...]
10. 天地網誌 » Blog&hellip | May 11th, 2006 at 5:04 pm
[...] http://ria.richtechmedia.com/?p=192 [...]
11. PLJ Network » Blog &hellip | May 23rd, 2006 at 1:43 pm
[...] http://ria.richtechmedia.com/?p=192 [...]
12. B L O G G I N G » &hellip | May 26th, 2006 at 3:34 pm
[...] http://ria.richtechmedia.com/?p=192 Categorized: 技術與支援 [...]
13. La-Li-Lu-Le-Lo » Bl&hellip | August 30th, 2006 at 9:44 am
[...] 參考資料: d.CAT – the RIA Blog [...]
14. WP.ORG.CN » MySQL&hellip | October 18th, 2006 at 1:54 pm
[...] wordpress 1.5升級注意事項 – 中文亂碼篇 [...]
15. AlexW&hellip | October 23rd, 2006 at 10:27 am
我用起來都很正常
但是comment裡面的句尾如果有”情”字就會變成?
事情事情事情
16. Alan&hellip | November 28th, 2006 at 11:59 am
剛剛把AppServ 升級….在 import wordpress 的資料發生了像版主一樣的情形…
除了把mysql都設成utf8之外…
另外還要在 wordpress(wp-includes/wp-db.php) 的程式在第44行加入…
$this->query(“SET NAMES ‘utf8′”);
才可以
17. 囈語二三,, ::PIXN&hellip | December 13th, 2006 at 4:36 pm
惱人的 mysql 4.1 之後的連線編碼問題…
mysql 自從 v4.1 開始近乎歇斯底里的在所有能加上語系設定的地方都加上了語系設定選項,\r\n大至全系統設定,小至單一欄位,\r\n全部的地方都可以個別設置不同的語系設定。\r\n而且除了…
18. flylover&hellip | December 28th, 2006 at 2:24 pm
謝謝你的教學
我被這個問題困擾好久
想自己架又只能打英文的結果…就是懷著滿滿的擔心去找穩定的blog服務網站,
終於弄好了>O
19. - F . M . - » 還&hellip | May 16th, 2007 at 3:03 am
[...] http://ria.richtechmedia.com/?p=192 [...]
20. Poon's Blog&hellip | October 26th, 2007 at 9:57 am
[...] 19, 2005 – 1:23 pmI promise this is gonna be the last time on it 自從寫完下面兩篇文章:wordpress 1.5升級注意事項 – 中文亂碼篇mysql 4.1中文亂碼第二擊過去幾個月就不斷有來信詢問各種 mysql [...]
21. MySQL升級5.0與UTF-8之&hellip | February 5th, 2009 at 1:43 pm
[...] wordpress 1.5升級注意事項 – 中文亂碼篇 [...]
22. MySQL升級5.0與UTF-8之&hellip | November 19th, 2009 at 1:56 am
[...] wordpress 1.5升級注意事項 – 中文亂碼篇 [...]
Trackback this post | Subscribe to the comments via RSS Feed