MYSQL中文模糊查找的使用方法


前段时间要作一个中文模糊查找功能,但MYSQL对中文字段支持不好,总是查不出想要的东东!后来在坛子上发了求助贴!也得到了大家的热心的帮助,最后通过在网上查找资料加动手实践终于搞定了,不敢独享,现在把方式贴出来!!

  今天终于搞定了MYSQL模糊查询问题!问题的根源是数据库对汉字使用的内码有问题,只要改过来就行!
具体为:在my.ini 文件中的[mysqld]段内加入 default-character-set =gb2312 ,然后重新启动MYSQL服务器。不过需要注意的是,如果你过去在使用数据库时没有改过来的话,现在你所看到的数据库中原来的数据,是汉字的基本都成了乱码了!!!!不过新加入的记录都显示正常,并且使用模糊查找也没有出现什么问题,这里给大家推荐一个模糊查找例句,大家直接套用就好了!

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


 [em01][em01][em01][em01]

 

昨天试了一下,原来我用的是三个字查找,这里举例子是两个字,所以可能试用时会没有发现问题,现在你们用三个字来查找看看!可能所有的MYSQL版本都是查不出来!!!

修改如下:

我在MYSQL中运用模糊查找时,发现结果并非想像那样,
  例句如下: select * from 表名 where 字段 like '%工人们%'
经过研究,终于发现了问题所在:要用“%查找数据%”查找时,如果查找数据是汉字,也就是全角字符时,在它前面的如果是半角字符的话,是查不出这条记录,如:“,工人们,”用“like ‘%工人们%'”是查不出来的,“工人们,”能查出来。如果全改成全角如:“,工人们,”则可以查出来!
  我想可能是MYSQL对中文支持的问題,不知有没有好的办法来解决这个問題呢???

[em06][em06][em06] 

作者: lrlc500   发布时间: 2011-05-23

应该没有你所说的这种现象, 估计仍然是你的字符集未设置正确。

给出你的测试用例,这样别人可以模拟你的测试以发现指出你的问题。


下面的测试显然与你所说的情况并不相同。
mysql> select ',工人们,' like '%工人们%';
+----------------------------+
| ',工人们,' like '%工人们%' |
+----------------------------+
| 1 |
+----------------------------+
1 row in set (0.89 sec)

mysql>

作者: ACMAIN_CHM   发布时间: 2011-05-23

mysql> select ',工人们,' like '%工人们%';
+----------------------------+
| ',工人们,' like '%工人们%' |
+----------------------------+
| 1 |
+----------------------------+
1 row in set (0.00 sec)

作者: rucypli   发布时间: 2011-05-23