让 Discuz 支持 MariaDB

昨晚把博客和论坛搬回国内了;博客在搬的过程中倒还挺轻松,只是 Discuz 搬迁后出现水土不服,提示

Illegal mix of collations (gbk chinese ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='

搜索后大概意思是说数据库编码不对。
我就郁闷了,数据库是 GBK 的,字段是 GBK 的,程序也是 GBK 的,怎么会编码有问题呢?
绕过计划任务进入论坛,发现论坛中文全部乱码了。
难道是我导入数据的时候有问题?于是乎我又重新用 GB2312 导出一份,上传到服务器,依然不行。
反反复复折腾一个小时之后,一个偶然的机会下发现 Discuz 下数据库被设置为 lantin 编码,这和 phpmyadmin 看到的不一样啊!
然后又研究了许久 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';

标签: Discuz


已有 11 条评论
  1. version_compare直接搞定

    1. 显然就是遗留了好久的代码……
      话说好久都没去你那里看看了

  2. NINJA NINJA

    请问 return '9.9.9' 是在哪个文件修改,谢谢解答

  3. 以后用得着 呼呼

  4. 支持了!= =沿着云签到的底部地址来到博主的博客。。

  5. L氵龙崎 L氵龙崎

    ==!KK大神,我登不上你的签到论坛了。。。账号和密码都对的,登陆总提示“抱歉,您的请求来路不正确或表单验证串不符,无法提交”登陆不上去。求救~~~~

    1. 点右上角登录按钮

      1. L氵龙崎 L氵龙崎

        登上去了~~谢谢啊

  6. 。。。

  7. KK大神,我们来抱大腿了,么么哒~~~

  8. 喜闻乐见

添加新评论