兴海北路

---男儿仗剑自横行
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

  • 随笔 - 85
  • 文章 - 0
  • 评论 - 17
  • 引用 - 0

常用链接

留言簿(6)

随笔分类

随笔档案

收藏夹

全是知识啊

搜索

  •  

最新评论

阅读排行榜

评论排行榜

mysql模糊查询结果不准确的解决办法
作者: falcon   发表日期: 2006-04-15 16:07   复制链接



引言:

在执行mysql的模糊查询操作时,发现返回的结果不准确,可至今没有找到完善的解决方案,所以特地来寻求解决方案拉.

问题:


我在命令行里头直接使用mysql(版本为mysql-4.0.18-win.zip)的时候也出现同样问题:
===================================
我有一个表里头存放了一些文件信息,包括中文的非中文的;
表名为file_tab,里头的重要字段是file,存放文件名,另外该字段的类型是char

我想查找包含"新鲜"这个词语的所有文件
理所当然的就用了

select file from file_tab where file like '%新鲜%'

执行后返回的结果却包含了其他信息,如下:

李湘给我新鲜
凯瑞·路易斯·托马斯&克利斯·马顿-水晶头骨之谜
刘易斯·托马斯-水母与蜗牛
刘易斯·托马斯-细胞生命的礼赞
托马斯-细胞生命的礼赞
[刘易斯·托马斯] 科学的危险
[柳文扬] 托马斯叔叔的推荐信
08.新鲜

结果明显不符合我的本来用意

自己分析:有可能是mysql对中文的处理问题,也许其他文件名里头的信息对应字节信息和"新鲜"对应的字节信息存在匹配关系,所以才得到这样不符合本来要求的结果,可是我找不到解决办法.

后来我以为是mysql的版本太低,从贵站下了msyql5.0.18,可是输出结果同样不准确,所以无奈
麻烦大家一起探讨/

详细见:http://bbs.mysql.cn/thread-633-1-1.html



解决办法:

解决问题本身
如果你定义该字段类型为char型,请用alter添加约束binary;
针对我上面的问题,解决方案如下:

先用describe file_tab查看该表的数据结构,然后通过下面的语句进行修改

alter table file_tab modify file char(100) binary not null;

[注:其中char(100) not null为原来的类型或约束,binary为添加的约束]

补充,如果你定义的字段类型为其他类型,遇到类似问题,可能也是没有加binary的缘故,试试就知道,呵呵

不过到底还是不知道为什么要用binary哦
所以我有去网路上找了一下,在百度里头输入mysql binary

先是找到《mysql中文参考手册》(用编辑>查找>binary,看看其作用)
http://www.yesky.com/imagesnew/software/mysql/manual_Compatibility.html
里头介绍了binary的作用:

缺省地,所有的字符串比较是忽略大小写的,由当前的字符集决定了(缺省为ISO-8859-1 Latin1)排序顺序。如果你不喜欢这样,你应该用BINARY属性或使用BINARY强制符声明列,它导致根据MySQL服务器主机的ASCII顺序进行排序。

后来竟然找到和我问题一样的东东:
《MySQL中文模糊检索问题的解决方法》
http://down.dl.net.cn/Article.asp?id=605
我的天啊,竟然有这么详细的解决办法

解决附带问题,实现不区分大小写查询

但是仔细一看,用binary后,竟然区分大小写拉

因此在查找的时候很不方便

那么我们该怎么办呢?

上面的文章中提到了解决办法,但在文末尾提到了这样会影响一些速度
那怎么尽量消除这个解决办法带来的的速度的影响呢?

这样子:

我们在添加数据进入表之前把该字段的所有数据全部该成小写,然后在查询的时候把输入的关键字也转换成小写的,那么问题不是解决拉,呵呵

具体可以这么做:

update file_tab set file=lcase(file);

然后查询的时候,改成
我们先设传进来的参数为$filename
那么可以这么做:

select file from file_tab where file like '%lcase($filename)%'

到现在,问题基本上完善解决拉

posted on 2008-03-14 16:14 随意门 阅读(1246) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理