在 MySQL下在进行中文模糊检索时经常会返回一些与之不相关的记录如查找 %a% 时返回的可能有中文字符却没有a字符存在本人以前也曾遇到过类似问题经详细阅读MySQL的Manual发现可以有一种方法很方便的解决并得到满意的结果
例子
希望通过标题对新闻库进行检索关键字可能包含是中英文如下SQL语句
QUOTE:
select idtitlename from achech_comnews where title like %a%
返回的结果某些title字段确定带了a关键字而有些则只有中文但也随之返回在检索结果中
解决方法使用 BINARY 属性进行检索如
QUOTE:
select idtitlename from achech_comnews where binary title like %a%
返回的结果较之前正确但英文字母区分大小写故有时在检索如Achech及achech的结果是不一样的知道了使用 BINARY 属性可以解决前面这个问题再看看 MySQL 支持的UCASE 及 CONCAT 函数其中 UCASE 是将英文全部转成大写而CONCAT函数的作用是对字符进行连接以下是我们完全解决后的SQL 语句
QUOTE:
select idtitlename from achech_comnews
where binary ucase(title) like concat(%ucase(a)%)
检索的步骤是先将属性指定为 BINARY 以精确检索结果而被 like 的 title内容存在大小写字母的可能故先使用 ucase 函数将字段内容全部转换成大写字母然后再进行 like 操作而 like 的操作使用模糊方法使用 concat的好处是传进来的可以是直接的关键字不需要带%万用符将a直接换成你的变量在任何语言下都万事无忧了 当然你也可以这么写
QUOTE:
select idtitlename from achech_comnews where binary ucase(title) like ucase(%a%)
检索的结果还算满意吧不过速度可能会因此而慢N毫秒