前段时间要作一个中文模糊查找功能,但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] 

解决方案 »

  1.   

    应该没有你所说的这种现象, 估计仍然是你的字符集未设置正确。给出你的测试用例,这样别人可以模拟你的测试以发现指出你的问题。
    下面的测试显然与你所说的情况并不相同。
    mysql> select ',工人们,' like '%工人们%';
    +----------------------------+
    | ',工人们,' like '%工人们%' |
    +----------------------------+
    |                          1 |
    +----------------------------+
    1 row in set (0.89 sec)mysql>
      

  2.   

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