网络编程
位置:首页>> 网络编程>> 数据库>> 搞定MySQL数据库中文模糊检索问题

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

  发布时间:2007-09-17 12:36:00 

标签:MySQL,检索,模糊

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

例子:


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


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


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


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


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

  



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


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



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


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


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

0
投稿

猜你喜欢

  • 对于什么是好设计,一万个人那里至少有一万零一个答案。每个人都有自己的答案,有的人还不止一个答案。老师说,一定要在设计里灌注自己的思想,有了自
  • 请教:如何在现存的文档中动态嵌入一段JS?如果是一段CSS呢?创建一个<script></script>并在scri
  • 最近,随着数据库的日益庞大,本来两个差不多的数据库,我开始发现我的数据库查询起来越来越比我朋友网站的慢了,经过初步对照,问题好像出在访问记录
  • 这个符合设计标准的三 级向上弹出菜单,纯css代码控制,没有使用javascript脚本,绿色环保,呵呵。兼容性应该更好。截图:<!D
  • 最近在做文章页盖楼显示的项目,数据来源是跟贴系统生成的UTF8格式的JSON数据。文章页的HTML编码格式是GB2312,在javascri
  • 对MySQL的用户而言,备受诟病的一个问题就是导入SQL备份文件时不能并发,使得导入的效率很低。今天,我们就来改变下思路,尝试一下并发导入的
  • 格式:Download.asp?FileName=要下载的文件名 代码如下:Dim Stream Dim Co
  •     你用过css么?当然,我是指你喜欢做网页的话,用过?很好,那你用过它的特效么?没有?那请跟我来。让我先
  • 我想把存在数据库里的每天24小时来访者数另放到一个Excel文件中去,可以吗?可以,其实就是将数据库里面的内容生成一个Excel文件:toe
  •  <%'该函数作用:按指定参数格式化显示时间。'numformat=1:将时间转化为yyyy-mm-dd h
  • <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> &nbs
  • 我们在做表单的时候经常会使用到这样的结构:<fieldset>     <lege
  • 数据库快照是怎样工作的可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照,在声明中有一个源数据库快照的附加说明。
  • 先谈一下面包屑的由来:很久很久以前,在大森林的边上住着一个贫穷的樵夫,他妻子和两个孩子与他相依为命。他的儿子名叫汉赛尔,女儿名叫格莱特。后来
  • ASP 内建对象Active Server Pages 提供内建对象,这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用
  • 有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错
  •  用ASP编写虚拟社区、网上购物等程序时,Application和Session对象具有举足轻重的作用,能够灵活合理地运用这两个对
  • 1、使用索引来更快地遍历表。缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索
  • 有空余的时候自己写了一下,代码没有进行很好的规整。如果发现bug请及时通告我,谢谢   主要功能:1、点击插入表情,可选
  • 采集开始第一步是分析要采集的页面。使用浏览器打开要采集的页面(如:http://sports.sina.com.cn/k/2008-09-1
手机版 网络编程 asp之家 www.aspxhome.com