昨晚把博客和論壇搬回國內了,博客在搬的過程中倒還挺輕松,只是 Discuz 搬遷后出現水土不服,下面我就來給各位朋友整理一下具體的解決過程.
提示:Illegal mix of collations (gbk chinese ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='
搜索后大概意思是說數據庫編碼不對,我就郁悶了,數據庫是 GBK 的,字段是 GBK 的,程序也是 GBK 的,怎么會編碼有問題呢?
繞過計劃任務進入論壇,發現論壇中文全部亂碼了,難道是我導入數據的時候有問題?于是乎我又重新用 GB2312 導出一份,上傳到服務器,依然不行.
反反復復折騰一個小時之后,一個偶然的機會下發現 Discuz 下數據庫被設置為 lantin 編碼,這和 phpmyadmin 看到的不一樣啊.//開源軟件:Vevb.com
然后又研究了許久 Discuz 的數據庫類,明明有設置為 GBK 的,難道沒設置成功?
在程序中加入 DB::query() 設置編碼,發現居然可以了,這是什么道理??表示不服,難道用 mysql_query() 就不行么?可是 DB::query() 又是調用 mysql_query() 的啊.
偶然調節代碼順序的時候,發現移動到 if($this->version() > '4.1') 外側竟然執行成功了,尼瑪原來你才是罪魁禍首,可是這句話有問題么?輸出下:
10.0.9-MariaDB
尼瑪我瞬間就明白了,這是一個字符串,“4.1”也是一個字符串,字符串比較是逐一比較各字符,先判斷 1 < 4,然后得出 10.0.9-MariaDB < 4.1.
我 QNMLGB,害我倒騰兩個小時……
解決辦法:修改 version 方法,return '9.9.9';
新聞熱點
疑難解答