怎样正确的解决 MySQL 中文模糊检索问题
作者:yashi 发布时间:2008-12-19 17:26: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%')
0
投稿
猜你喜欢
- 本文实例讲述了Python实现使用request模块下载图片。分享给大家供大家参考,具体如下:利用流传输下载图片# -*- coding:
- 本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法。分享给大家供大家参考。具体分析如下:这段代码主要用来从图片提取
- 常用的python第三方库安装工具大概有三种:1、pip (推荐)2、easy_install3、setup.py常见的安装包格式:1、wh
- 目录Counter举例实战sortedallF-strings总结Python中冷门但非常好用的内置函数 Counter举例 实战sorte
- 1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数
- delattr 函数用于删除属性。delattr(x, 'foobar') 相等于 del x.foobar。语法setat
- 简介A的独有+AB的公有B的独有+AB的公有AB的公有A的独有B的独有A的独有+B的独有+AB的公有A的独有+B的独有练习建表部门表DROP
- 一、图片验证码django-simple-captcha配置1.在pycharm中,File====》Settings====》Projec
- 一、 只复制一个表结构,不复制数据 select top 0&
- 1. 真值测试所谓真值测试,是指当一种类型对象出现在if或者while条件语句中时,对象值表现为True或者False。弄清楚各种情况下的真
- 这篇论坛文章(赛迪网技术社区)主要介绍了MySQL数据库主从复制的相关概念及设置方法,详细内容请大家参考下文:MySQL支持单向、异步复制,
- 导语周末、假期来了,七夕也快到了,又到一年中最一票难求的时候了!那些假期想回家、过节异地恋的小可爱们,能准时抢到回家(约会对象)的城市票嘛?
- 请问鼠标移过去就出现二级菜单代码怎么写啊 <head><style type="tex
- 0.前言SQLite是一款开源、轻量级、跨平台的数据库,无需server,无需安装和管理配置。它的设计目标是嵌入式的,所以很适合小型应用,也
- 目录什么是异常?异常处理try-except 格式一-try...except...格式二-try...except {error
- 定义总是很抽象。存储进程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL SERVER)。如果我们
- 解析接口返回数据1、把json格式的数据转换成单个{key,value}的形式,并把每个dict存入listdef parse(self,d
- 1、最小二乘也可以拟合二次函数我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的。下面我们
- mysql常用导出数据命令:1.mysql导出整个数据库 mysqldump -hhostname -uusername -pp
- 背景如果需要访问远程服务器的Mysql数据库,但是该Mysql数据库为了安全期间,安全措施设置为只允许本地连接(也就是你需要登录到该台服务器