搜索时出现Illegal mix of collations for operation 'like' 错误

 更新时间:2020年11月30日 11:33  
Illegal mix of collations for operation 'like'
select count(*) as total from ***_ecms_live where (title like '%高级%' or sskehu like '%高级%' or ssgs like '%高级%' or domain like '%高级%'

站长在给一个帝国cms网站搬家时发现后台信息搜索出错,提示如下错误 


Illegal mix of collations for operation 'like'

select count(*) as total from ***_ecms_live where (title like '%高级%' or sskehu like '%高级%' or ssgs like '%高级%' or domain like '%高级%'


这是由于升级mysql5.5才会出现的错误,


只需打开 /e/admin/LisNews.php


查找:


$sr['searchallfield'].=$or.$r1[1]." like '%[!--key--]%'";

改为


$sr['searchallfield'].=$or.$r1[1]." like binary '%[!--key--]%'";

即可



错误分析

产生错误的原因:

  • articleauthor字段的字符集是utf8mb4_general_ci

  • authorname字段的字符集是utf8mb4_unicode_ci

  • 不同字符集的字段不能直接进行比较。

解决方法

根本的解决方法是通过DDL修改表结构,使其字段类型一致。

但是,有时候可能因为条件限制,不能进行DDL操作。

下面提供一种不修改表结构的解决方法:通过cast内置函数转换类型(方法不唯一,比方说convert函数也可以)。

# 无需在意逻辑select *from article As ar left join author AS au on ar.author_id = au.idwhere CAST(ar.author AS char) <> CAST(au.name AS char);1234

关于cast函数的语法

CAST(field AS type)1

其中,可选的type如下:

  • CHAR 字符型

  • DATE 日期型

  • DATETIME 日期和时间型

  • DECIMAL float型

  • SIGNED int

  • TIME 时间型


相关文章

  • 帝国CMS把[!--list.pageno--]就替换成“第[!--list.pageno--]页

    /*解决代码高亮太长不换行*/ .syntaxhighlighter{word-break:break-all;} uParse('#newstext', {rootPath: '/e/extend/ueditor/'}) 打开:e\class\functions.php 修改 $s...2017-07-06
  • 帝国CMS商品加入购物车链接代码

    商品加入购物车链接地址为:[!--news.url--]e/ShopSys/doaction.php?enews=AddBuycar&classid=[!--classid--]&id=[!--id--]...2015-12-30
  • 帝国CMS后台登陆验证码不显示的解决方案!

    针对帝国CMS7.0:有得同学开启了后台登陆验证码,但是由于种种原因后台验证码没有显示,然而不填写验证码又无法登陆后台关闭后台验证码,墨鱼给同学们一个解决方案用工具(一定要用工...2016-05-08
  • 怎么对百度网页搜索的检索指标进行评估

    用户为满足自己某种需求而来到搜索引擎的,判断用户的需求是做好网站的开始。只有准确地判断出用户需求,了解用户搜索的目的,才能合理地衡量出一个网站结果的质量好,做好搜...2016-10-10
  • 帝国CMS调用最新最多评论文章

    /*解决代码高亮太长不换行*/ .syntaxhighlighter{word-break:break-all;} uParse('#newstext', {rootPath: '/e/extend/ueditor/'}) 用灵动标签调用最新最多评论文章: [...2016-08-27
  • 帝国CMS添加百度地图标注方法

    给帝国CMS任意模型加上百度地图标注功能。 第一步:首先在模型建立三个字段: 字段名:map_x 字段类型:DOUBLE 字段名:map_y 字段类型:DOUBLE 字段名:map_z 字段类型:TINYINT...2016-05-19
  • 帝国CMS灵动标签调用当前父栏目下所有子栏目-支持选中状态/高亮

    帝国CMS实现灵动标签调用当前父栏目下所有子栏目-支持选中状态及当前栏目高亮,支持栏目自定义排序。最适用于内容模板,显示父栏目下的子栏目。 支持静态栏目页与动态栏目页 代...2016-05-19
  • 如何避免被搜索引擎视为作弊

      一个网站要想成功注册,它起码应具备两个条件,一是网站本身要有较好的内容和设计,二是网站没有作弊行为。这里所谓的“作弊”,是指采用一些特殊的、有悖常规的网...2016-09-20
  • yii2带搜索功能的下拉框实例详解

    带搜索功能下拉框在项目中经常会用到,下面小编把实现代码分享到脚本之家平台,供大家参考...2016-05-13
  • php搜索csv表格中是否存在指定数据

    php搜索csv中的数据原理是打开csv文件,然后一行行搜索指定的内容是否包含在我们读取这代码中,如果是返回true。 //搜索csv中指定内容 代码如下 复制代码...2016-11-25
  • Asp.net中使用DapperExtensions和反射来实现一个通用搜索

    这篇文章主要介绍了Asp.net中使用DapperExtensions和反射来实现一个通用搜索功能,非常不错,具有参考解决价值,需要的朋友可以参考下...2021-09-22
  • 帝国CMS前台信息游客凭密码删除主题

    您是不是期待此插件很久了,帝国论坛上终于有用户开发出来了,首先非常感谢他,在此我整理收集了过来,此插件非常适合一些信息发布的站点使用,如果您正好有此类站点,不凡试试看或许能...2015-12-30
  • 帝国CMS 7.0 在内容页调用当前专题名称和链接

    因为帝国CMS 7.0信息页不再有ztid字段,所以直接是查询不到的,但是可以用灵动标签sql调用,具体调下方法如下:灵动标签sql调用:select ztid from phome_enewsztinfo where classid=...2015-12-30
  • ECMS(帝国CMS)搜索伪静态教程

    本次修改是基于ECMS(帝国cms) EmpireCMS v7.0 Free (201301151518)版本下测试修改的。其他未测试,大同小异吧。可以根据修改做修改即可...2015-12-30
  • 帝国CMS(ECMS)JS调用购物车数量

    任意页面动态调用购物车数量,不用刷新数据。 同时适用于帝国CMS6.6、7.0 新建一个buycarjs.php文件放在/e/shopsys/buycar/下,代码如下: <?phprequire("../../class/co...2016-05-19
  • 精华:GOOGLE搜索秘籍全攻略

    一,GOOGLE简介   Google(www.google.com)是一个搜索引擎,由两个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明,Google Inc. 于1999年创立。2000年7月...2016-09-20
  • 帝国CMS下载不采用弹出窗口式说明

    6、下载不采用弹出窗口式说明 ...2016-05-19
  • GridView高效分页和搜索功能的实现代码

    GridView高效分页和搜索功能的实现代码,需要的朋友可以参考一下...2021-09-22
  • 帝国CMS安装以及恢复数据模板视频教程

    帝国CMS安装以及恢复数据模板视频教程,主要讲解了墨鱼出品的帝国CMS源码的安装以及数据库模板的回复过程,请大家注意视频里的一些操作细节。选择超清模式播放!...2016-05-08
  • PHP网络开发详解:搜索页面的设计

    PHP对于数据库的搜索主要通过使用SQL语句中的like子句来实现。如果同时搜索多个关键词,可以使用union子句来将搜索结果合并起来。以下代码实现了一个搜索页面...2016-11-25