MySQL 中文模糊查询不正确问题解决方案 .
2012-02-27 12:42
483 查看
我在开发过程中发现 MySQL 进行数据查询时存在一些问题.
如模糊查询一个字段,该字段中包含"了"字, SQL 语句如下:
select * from table_name where field_name like '%了%';
显示的记录中除了包含"了"字的记录,连"见浪"竞然也被查了出来.
再如:我查询一个字段等于 "chouY", SQL 语句如下:
select * from table_name where field_name='chouY';
结果中竟然还有 "Chouy".这是为何呢?
经过在网上的查找, 找到了原因: 在 MySQL 中, 进行中文排序和查找的时候, 对汉字的排序和查找结果是错误的. 出现这个问题的原因是: MySQL 在查询字符串时是大小写不敏感的, 在编绎 MySQL 时一般以 ISO-8859 字符集作为默认的字符集, 因此在比较过程中中文编码字符大小写转换造成了这种现象.
在网上也找到了几种解决方法:
方法一 :
解决方法是对于包含中文的字段加上 "binary" 属性, 使之作为二进制比较, 例如将 "name char(10)" 改成 "name char(10)binary".
方法二 :
如果你使用源码编译 MySQL, 可以编译 MySQL 时使用 --with-charset=gbk 参数,这样 MySQL 就会直接支持中文查找和排序了。
方法三 :
可以使用 Mysql 的 locate() 函数来判断。以上述问题为例,使用方法为:
SELECT * FROM table_name WHERE locate(field_name,'了') > 0;
方法四 :
把您的 select 语句改成这样:
SELECT * FROM table_name WHERE field_name LIKE BINARY '%了%';
方法五 :
你可以修改 my.ini (Linux 下为 my.conf)文件,找到 default-character-set 属性,反把其值设为 gbk; 或者在启动 mysqld-nt (Linux 下为 mysqld)时加上启动参数 --default-character-set=gbk, 这样也能解决问题.
以上的方法我只试验了第四种和第五种方法, 其它的并没有验证. 第四种方法能解决这两个问题; 第五种方法只能解决第一个中文问题, 但对数据库中已有的中文数据会产生问题.
如模糊查询一个字段,该字段中包含"了"字, SQL 语句如下:
select * from table_name where field_name like '%了%';
显示的记录中除了包含"了"字的记录,连"见浪"竞然也被查了出来.
再如:我查询一个字段等于 "chouY", SQL 语句如下:
select * from table_name where field_name='chouY';
结果中竟然还有 "Chouy".这是为何呢?
经过在网上的查找, 找到了原因: 在 MySQL 中, 进行中文排序和查找的时候, 对汉字的排序和查找结果是错误的. 出现这个问题的原因是: MySQL 在查询字符串时是大小写不敏感的, 在编绎 MySQL 时一般以 ISO-8859 字符集作为默认的字符集, 因此在比较过程中中文编码字符大小写转换造成了这种现象.
在网上也找到了几种解决方法:
方法一 :
解决方法是对于包含中文的字段加上 "binary" 属性, 使之作为二进制比较, 例如将 "name char(10)" 改成 "name char(10)binary".
方法二 :
如果你使用源码编译 MySQL, 可以编译 MySQL 时使用 --with-charset=gbk 参数,这样 MySQL 就会直接支持中文查找和排序了。
方法三 :
可以使用 Mysql 的 locate() 函数来判断。以上述问题为例,使用方法为:
SELECT * FROM table_name WHERE locate(field_name,'了') > 0;
方法四 :
把您的 select 语句改成这样:
SELECT * FROM table_name WHERE field_name LIKE BINARY '%了%';
方法五 :
你可以修改 my.ini (Linux 下为 my.conf)文件,找到 default-character-set 属性,反把其值设为 gbk; 或者在启动 mysqld-nt (Linux 下为 mysqld)时加上启动参数 --default-character-set=gbk, 这样也能解决问题.
以上的方法我只试验了第四种和第五种方法, 其它的并没有验证. 第四种方法能解决这两个问题; 第五种方法只能解决第一个中文问题, 但对数据库中已有的中文数据会产生问题.
相关文章推荐
- MySQL 中文模糊查询不正确问题解决方案
- MySQL 中文模糊查询不正确问题解决方案
- 怎样正确的解决MySQL中文模糊检索问题
- Mysql通过中文查询数据查不出结果问题解决方案
- MySql解决不区分大小写和中文模糊查询问题
- mysql查找语句中包含中文字符时查询失效的问题及解决方法
- mysql字符编码设置,mysql中文问题解决方案
- mysql默认编码设置成gbk,解决dos下查询中文乱码的问题!
- MySQL中文模糊检索问题的解决方法
- Mysql彻底解决中文乱码问题的方案(Illegal mix of collations for operation)
- MySQL 中文显示乱码以及中文查询条件返回0条结果的问题解决
- 解决mysql不能模糊查询\的问题
- mysql查询安装目录与安装mysql时候如果遇到什么public key not installed 问题解决方案。
- 关于MySql entity framework 6 执行like查询问题解决方案
- MySQL中文模糊检索问题的解决方法
- MySQL的中文显示问题解决方案(包括Java接口)
- 解决使用cmd或powershell进行数据库(MySQL,SQLite3...)查询时中文乱码的问题
- MySQL查询全部数据集结果不一致问题解决方案
- MySQL中文模糊检索问题的解决方法
- MySQL5.0中文问题解决方案如下