搞定MySQL数据库中文模糊检索问题

翻译|其它|编辑:郝浩|2007-09-11 11:38:06.000|阅读 801 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

 MySQL  下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找 "%a%" 时,返回的可能有中文字符,却没有  a  字符存在。本人以前也曾遇到过类似问题,经详细阅读  MySQL    Manual,发现可以有一种方法很方便的解决并得到满意的结果。

 

例子:

 

希望通过标题对新闻库进行检索,关键字可能包含是中英文,如下  SQL  语句:

 

以下为引用的内容:

QUOTE:

select id,title,name from achech_com.news where title like '%a%' 

 

返回的结果,某些  title  字段确定带了“a”关键字,而有些则只有中文,但也随之返回在检索结果中。

 

解决方法,使用  BINARY  属性进行检索,如:

 

以下为引用的内容:

QUOTE:

select id,title,name from achech_com.news where binary title like '%a%' 

      

返回的结果较之前正确,但英文字母区分大小写,故有时在检索如“Achech”“achech”的结果是不一样的。知道了使用  BINARY  属性可以解决前面这个问题,再看看 MySQL  支持的  UCASE    CONCAT  函数,其中  UCASE  是将英文全部转成大写,而  CONCAT  函数的作用是对字符进行连接,以下是我们完全解决后的  SQL  语句:

 

以下为引用的内容:

QUOTE:

select id,title,name from achech_com.news

where binary ucase(title) like concat('%',ucase('a'),'%') 

 

检索的步骤是先将属性指定为  BINARY ,以精确检索结果,而被  like    title  内容存在大小写字母的可能,故先使用  ucase  函数将字段内容全部转换成大写字母,然后再进行  like  操作,而  like  的操作使用模糊方法,使用  concat  的好处是传进来的可以是直接的关键字,不需要带“%”万用符,将“'a'”直接换成你的变量,在任何语言下都万事无忧了。 当然你也可以这么写:

 

以下为引用的内容:

QUOTE:

select id,title,name from achech_com.news where binary ucase(title) like ucase('%a%') 

 

检索的结果还算满意吧,不过速度可能会因此而慢  N  毫秒。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:赛迪网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP