当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 怎样正确的解决 MySQL 中文模糊检索问题

MYSQL
Windows 2003搭建Apache PHP MySQL环境经验分享
PHP环境配置IIS5.0+PHP5.23+MYSQL5+phpMyAdmin
详解用phpmyadmin建立MYSQL数据库的过程
几条常见的数据库分页 SQL 语句
将MySQL数据导入到Sql Server中
解决MySQL数据库中文模糊检索问题
MySQL索引分析和优化
提高MySQL查询效率的三个有效的尝试
MySQL查询不含周末的五天前的日期
连接MySQL数据库失败频繁的原因分析
SQL Server和MySQL的安全性分析
Linux搭建Discuz论坛的方法
如何保护MySQL中的重要数据
怎样把你的 MySQL 完全中文化
FreeBSD 6.2快速架设网站服务器教程
Oracle限制返回结果集的大小
MySQL中与浮点比较有关问题的解决
distinct在mysql中查询多条不重复记录值的解决办法
全面提升Linux服务器的安全
不能通过mysql.sock连接MySQL问题的方法

MYSQL 中的 怎样正确的解决 MySQL 中文模糊检索问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 103 ::
收藏到网摘: n/a

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

例子:

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


返回的结果,某些 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%')