網友 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 修改。
原来是这个问题,我用的也是DreamHost主机。
就是说,DH主机预设的datebase的那个整理是latin_swedish_ci的,而2.2要求的却是utf8的,结果就造成了冲突,对吧?
我去修改一下。
非常感谢天佑。
好像我发表的几天篇评论都没有通过…………
@dupola:你的留言全被 Spam Karma 2 擋掉,檢查後發現被擋的原因是一來你使用的 browser 關閉了 javascript 被扣分,二來你的連續幾個留言的 IP address 也不一樣,又被扣分,所以留言被擋下來。
你是否使用外來 proxy 上網而且不斷轉變 proxy?
天祐你好
經過你的詳細解說,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了
还好以前就养成了创建数据库之后立刻就更改collation到utf8_general_ci的习惯 :sweatdrop:
是的,我也碰到这个问题,现在无法添加中文Tag ,错误信息跟zero 一样,是不是把host 的数据库中collation 到utf8_general_ci 就能搞定呢?
不行啊,修改了数据库的collation 为utf8_general_ci 还是不能设置中文Tag....
每张table 的collation 是不是都要修改为utf8_general_ci ???已经建立好的有好多需要修改啊,我试过修改Tag 表,不行....
@venson:當然每個 tables 的 collation 都要統一吧。你的 blog 不是 WP 2.2 新建的?否則應該 WP core tables 的 collation 都是 utf8_general_ci 吧(以不改動 wp-config.php 內的 DB_CHARSET 和 DB_COLLATE 來說)。
Extended Live Archives和2.2版也存在冲突,启用后wordpress自带的自定义首页的功能就失灵了,不知天佑注意到没有,暂时还没有找到原因。
天佑,我用緊Wordpress v2.1.3,寫的都是中文,Theme又是k2,你覺得值得升去v2.2嗎?有什麼特別好處?
謝!
@Cheicro:經你提醒再到我的 WP 2.2 測試 blog 一試,發現真的如你所說,暫時不知有什麼解決方法。
@lrz:
就算覺得 WP 2.2 的新功能對你沒有多大用,可以的話都作升級吧,因為在 WordPress 2.2 公布文章有以下一段文字。
hi~天佑。看你说到SK2,我有一个疑惑,SK2中的垃圾留言在数据库中是否完全清除了呢?我在SK2的Admin界面中清楚了,但数据库里面似乎还有啊:(
还有,很好奇,我通过FTP上传WordPress的一个新版本,逐个覆盖原版本的WordPress文件,此时若有人访问我的blog,会出现什么情况?
咦……怎么我的留言右侧是一个“1”?而不是数字继续排序?
@awflasher:你是用什麼版本的 SK2,在 2.3 rc1,預設只顯示 Karma 大於 -20 的 spam,如要全部顯示,要將 Karma 改為 0 才可。
覆蓋中的時候,的確很難說,有可以連不上,有可能沒問題,不能一概而論。
最後,ajax comment 我沒心去研究那個留言數目,因為再 reload 就會顯示正常。
你好~~~我修改后,没错误了,但怎么不可以用中文标签....禁止插件后又可以用~~~真怪,麻烦下....先谢了
@wt.object 如果你是用 WordPress 2.3.x 的話,這是當然的,因為 UTW 是不兼容 WordPress 2.3.x 的。