mysql like 匹配查询出不正确中文的解决办法

本文讲述mysql使用like语句时,匹配查询出不正确中文的解决办法

mysql like 搜索的时候发现,用

select title from tb_name where title like ‘%a%‘

的时候出来的结果除了包含a的名字外连包含中文“新”的名字也出现在搜索结果里面,这令我想弄清楚mysql的匹配模式和规则到底是怎么样的,另外在匹配的时候正则表达式也很常用!

出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。

解决办法:

1.在建表的时候对于包含中文的字段加上“BINARY”属性,使之进行二进制比较,例如讲"name char(10)"改成"name char(10) BINARY"。但是这样你对该表的该字段进行匹配的时候是区分大小写的。

2.如果使用源码编译MySQL,可以在编译的时候使用--with--charset=gbk参数,这样mysql就直接支持中文查找和排序。

3.使用mysql的locate函数来判断。如:

SELECT * FROM table WHERE locate(substr,str)>0 ;

locate()有两个形式:LOCATE(substr,str), LOCATE(substr,str,pos)。返回substr在str中的位置,如果str不包含substr返回0。这个函数也是不区分大小写的。

4.这样使用sql语句:

SELECT * FROM TABLE WHERE FIELDS LIKE BINARY ‘%FIND%‘

但是这和1一样是区分大小写的如果你想进行不区分大小写的查询的时候就要使用upper或者lower进行转换。

5.使用binary和ucase函数及concat函数。ucase是讲英文全部转换大写,concat对字符串进行连接。新的sql语句如下:

select id,title,name from achech_com.news where binary ucase(title) like concat(‘%‘,ucase(‘a‘),‘%‘)

也可以写为

select id,title,name from achech_com.news where binary ucase(title) like ucase(‘%a%‘)

检索的结果还算满意吧,不过速度可能会因此而慢N毫秒喔。 因为使用like和%进行匹配的话对效率会有一定的影响。

时间: 2024-08-05 02:27:30

mysql like 匹配查询出不正确中文的解决办法的相关文章

mysql模糊匹配查询like,regexp,in

mysql模糊匹配查询like,regexp,in 摘要 内容比较简单,无摘要. 关键词 模糊查询  like  regexp  in  contact 正文 下图是示例用到的数据表信息 MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式 一.SQL模式 SQL的模式匹配允许你使用"_"匹配任何单个字符,而"%"匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的.

navicat for mysql 显示中文乱码解决办法

navicat for mysql 显示中文乱码解决办法   最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法都不 适合我的问题,网上的大多数解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用mysql字符集”前的对勾,在编码 里选择utf-8,这种方法对于部分问题可能适合,但是我的乱码问题依然存在,于是乎我又将ut

QQ打不出中文的解决办法

先把语言栏关了,再开始---运行,运行ctfmon就好了QQ打不出中文的解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法 一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一直接在linux上面使用insert语句插入中文,正常2.尝试二在tomcat配置文件server.xml中加入useBodyEncodingForURI="true",不行3.尝试三在tomcat配置文件server.xml中再加入URIEncodin

PHP中文乱码解决办法

一.         首先是PHP网页的编码 1.     php文件本身的编码与网页的编码应匹配 a.     如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANS

PHP Json函数不能处理中文的解决办法

PHP5.2 新增的 json 功能是非常受欢迎的,但是经过测试发现,json_encode对中文的处理是有问题的:    不能处理GB编码,所有的GB编码都会替换成空字符:    utf8编码的中文被编码成unicode编码,相当于javascript的escape函数处理的结果.    为了能正确使用json,首先我们就应该在编码上采用utf8编码,然后再对json_encode的返回结果稍加处理就可以得到正确的结果了.?1. [代码]php代码    <?php/*PHP5.2 新增的 j

MYSQL更改root password时遇到Access Denied的解决办法

今天在公司虚拟机上装MYSQL之后需要修改root password,然而遇到这样的错误: Access denied for user 'root'@'localhost' (using password:YES) 后来在网上搜了下,找到如下解决办法,测试可用. # /etc/init.d/mysql stop# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &# mysql -u root mysqlmysql&g

VS2008编程软件过期的问题,过期弹出需要升级窗口的解决办法

找到安装文件,再点autorun.exe安装文件,然后重复安装过程就会弹出需要填写系列号的地方,天上下面第一个系列号即可. Visual Studio 2008 Professional Edition: XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT Visual Studio 2008 Team Test Load Agent:WPX3J-BXC3W-BPYWP-PJ8CM-F7M8T Visual Studio 2008 Team System:PYHYP-WXB3B-B2CC

Oracle导入中文乱码解决办法

Oracle导入中文乱码解决办法 一.确保各个客户端字符集的编码同服务器字符集编码一致 1-       确定sqlplus字符集编码,如果是windows设置环境变量. 2-       确保SecureCRT客户端的字符集为简体中文即可,不要设置为UTF-8,否则在连接oralce数据库时,中文都显示乱码,以免产生不必要的麻烦. 二.设置带中文的sql脚本的字符集