WordPress 2.2 與 plugins 的 collation 問題

網友 treblam 和 dupola 都不約而同問了一個有關新建的 WordPress 2.2 blog 和 Ultimate Tag Warrior 出現的 collation 問題 - illegal mix of collations。

廣義來說問題不只是發生在 UTW 身上,所有會建立額外 tables 的 plugin 都有可能出現這個問題,"illegal mix of collations" 的意思是指在 WordPress database 內出現了不同 collations 的 tables,為何會發生這問題?這要從 WordPress 2.2 開始支援的自定 character set 和 collation 說起。

由 WordPress 2.2 開始,wp-config.php 內多了 DB_CHARSET 和 DB_COLLATE 兩個設定,用來選擇建立 table 的 character set 和 collation。這個對使用非英語系、UTF-8 編碼、使用 MySQL 4.1+ 的朋友尤其方便,因為不再每次升級都要修改 wp-db.php,加入強制使用 UTF-8 編碼的 code。

WordPress 預設的 DB_CHARSET 是 UTF-8,而 DB_COLLATE 是空白的,當空白時就會自動選取該 charset 的預設 collation,而 UTF-8 預設的 collation 是 utf8_general_ci。

但一些在 WordPress 2.2 前開發的 plugin,它們不懂 wp-config.php 內這兩個新設定,當需要建立額外 tables 時,collation 都只會跟著 database 原本的 collation 走。如果 database 的 collation 和 wp-config.php 內的設定不同,那就會出現這個問題。

解決方法其實很簡單,只需在 phpMyAdmin 內將新增 tables 的 collation 變成和 WordPress core tables 一樣便可以了。

順帶一提,為避免將來有另一些 plugin 引致同一個問題,我建議大家如果 database 的 collation 和 wp-config.php 內不一樣的話,記著把 database 的 collation 一併改變,我不知其他 Web hosting 公司的 MySQL 預設 collation 是什麼,DreamHost 就很奇怪,預設 collation 是 latin_swedish_ci,所以我有個習慣在 panel 新增 database 後,第一時間便將 database 的 collation 修改。

21 Responses to “WordPress 2.2 與 plugins 的 collation 問題”

  1. 3013

    原来是这个问题,我用的也是DreamHost主机。
    就是说,DH主机预设的datebase的那个整理是latin_swedish_ci的,而2.2要求的却是utf8的,结果就造成了冲突,对吧?
    我去修改一下。
    非常感谢天佑。

  2. 3012

    好像我发表的几天篇评论都没有通过…………

  3. 3006

    @dupola:你的留言全被 Spam Karma 2 擋掉,檢查後發現被擋的原因是一來你使用的 browser 關閉了 javascript 被扣分,二來你的連續幾個留言的 IP address 也不一樣,又被扣分,所以留言被擋下來。

    你是否使用外來 proxy 上網而且不斷轉變 proxy?

  4. 3008

    天祐你好
    經過你的詳細解說,utw又可以用了,謝謝你
    不過好像只能設定英文的tag,碰到中文的tag又會出現錯誤,跟之前的錯誤訊息比較,最下面好像有多了些錯誤訊息,我把它po上來向你請教^^:
    Warning: Cannot modify header information - headers already sent by (output started at /home/XXXX/public_html/XXXX/wp-includes/wp-db.php:133) in /home/XXXX/public_html/XXXX/wp-includes/pluggable.php on line 329

    不好意思,我把私人資料用XXXX代替喔^_^
    另外我wp-config.php的DB_COLLATE設定成utf8_general_ci,我把資料庫的collation都改成utf8_general_ci了

  5. 2999

    还好以前就养成了创建数据库之后立刻就更改collation到utf8_general_ci的习惯 :sweatdrop:

  6. 2783

    是的,我也碰到这个问题,现在无法添加中文Tag ,错误信息跟zero 一样,是不是把host 的数据库中collation 到utf8_general_ci 就能搞定呢?

  7. 2709

    不行啊,修改了数据库的collation 为utf8_general_ci 还是不能设置中文Tag....
    每张table 的collation 是不是都要修改为utf8_general_ci ???已经建立好的有好多需要修改啊,我试过修改Tag 表,不行....

  8. 2795

    @venson:當然每個 tables 的 collation 都要統一吧。你的 blog 不是 WP 2.2 新建的?否則應該 WP core tables 的 collation 都是 utf8_general_ci 吧(以不改動 wp-config.php 內的 DB_CHARSET 和 DB_COLLATE 來說)。

  9. 3105

    Extended Live Archives和2.2版也存在冲突,启用后wordpress自带的自定义首页的功能就失灵了,不知天佑注意到没有,暂时还没有找到原因。

  10. 3107

    天佑,我用緊Wordpress v2.1.3,寫的都是中文,Theme又是k2,你覺得值得升去v2.2嗎?有什麼特別好處?

    謝!

  11. 3128

    @Cheicro:經你提醒再到我的 WP 2.2 測試 blog 一試,發現真的如你所說,暫時不知有什麼解決方法。

  12. 3129

    @lrz:

    就算覺得 WP 2.2 的新功能對你沒有多大用,可以的話都作升級吧,因為在 WordPress 2.2 公布文章有以下一段文字。

    In addition there were also dozens of UI and accessibility improvements, ranging from more concise wording around options and links to things like a view and preview link above the content box when you’re editing a post or page, as well as several important security fixes. We don’t plan to continue to support the 2.1 branch, so this is a required upgrade.
  13. 3119

    hi~天佑。看你说到SK2,我有一个疑惑,SK2中的垃圾留言在数据库中是否完全清除了呢?我在SK2的Admin界面中清楚了,但数据库里面似乎还有啊:(
    还有,很好奇,我通过FTP上传WordPress的一个新版本,逐个覆盖原版本的WordPress文件,此时若有人访问我的blog,会出现什么情况?

  14. 3117

    咦……怎么我的留言右侧是一个“1”?而不是数字继续排序?

  15. 3173

    @awflasher:你是用什麼版本的 SK2,在 2.3 rc1,預設只顯示 Karma 大於 -20 的 spam,如要全部顯示,要將 Karma 改為 0 才可。

    覆蓋中的時候,的確很難說,有可以連不上,有可能沒問題,不能一概而論。

    最後,ajax comment 我沒心去研究那個留言數目,因為再 reload 就會顯示正常。

  16. 10323

    你好~~~我修改后,没错误了,但怎么不可以用中文标签....禁止插件后又可以用~~~真怪,麻烦下....先谢了

  17. 10327

    @wt.object 如果你是用 WordPress 2.3.x 的話,這是當然的,因為 UTW 是不兼容 WordPress 2.3.x 的。

  1. 2926 BloggingPro China » WordPress 2.2 與 plugins 的 collation 問題
  2. 2944 WordPress 2.2 與 plugins 的 collation 問題 | wordpress blog xqxp.com
  3. 2837 随便说说SBTalk
  4. 3179 今日連結 (2007-06-15) [JeffHung.Blog]

Leave a Reply