教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 mysql 中文排序问题各种方法介绍

mysql 中文排序问题各种方法介绍

发布时间:2023-05-02   编辑:jiaochengji.com
教程集为您提供mysql 中文排序问题各种方法介绍等资源,欢迎您收藏本站,我们将为您提供最新的mysql 中文排序问题各种方法介绍资源
中文排序是mysql数据库中一个难处理的问题,下面我来给大家详细介绍在mysql中文排序中碰到的问题与一些不错的解决办法,有需要了解的朋友可进入参考。

方法1 
---- 
"mysql在查询字符串时是大小写不敏感的,在编绎mysql时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中
中文编码字符大小写转换造成了这种现象,比较应急的方法是对于包含中文的字段加上"binary"属性,使之作二进制比较,
例如将"name char(10)"改成"name char(10)binary"." 
(已试验成功) 

方法2 
----- 
编译mysql时使用--with--charset=gbk 


utf8中文排序的

解决办法如下:

  1、不想改变表定义及默认编码的情况,将字段先转换成gbk编码再排序:

  SELECT * FROM table ORDER BY CONVERT( chinese_field USING gbk ) ;

  前提是在安装mysql时安装了gbk字符集,不然会报错:

  #1115 - Unknown character set: 'gbk'

  在编译源码时加上gbk编码即可,如果已经安装好了,重新编译再安装,重新编译安装一般不会影响mysql的已有设置,包括数据都不会受到影响。

  2、直接将字段的字符集改成gbk,然后直接使用order by 排序即可。

  mysql 5.x支持某列单独定义字符集。

  3、网上也有人说将字段定义加上binary属性也能达到效果,未作测试,不敢评论。

mysql的文档中也提到字符集校对规则:

 代码如下 复制代码

  SELECT * FROM t1 ORDER BY a COLLATE utf8_bin;

但此仅仅只影响校对规则,并不影响字符的字符集本身


对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。

如果你使用源码编译MySQL,可以编译MySQL时使用 --with--charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了(默认的是latin1)。也可以用 extra-charsets=gb2312,gbk 来加入多个字符集。
如果不想对表结构进行修改或者重新编译MySQL,也可以在查询语句的 order by 部分使用 CONVERT 函数。

比如

 

 代码如下 复制代码
select * from mytable order by CONVERT(chineseColumnName USING gbk);

UTF8 默认校对集是 utf8_general_ci , 它不是按照中文来的。你需要强制让MySQL按中文来排序。

 代码如下 复制代码

select * from core_vender_info order by convert(vender_abbrev USING gbk) COLLATE gbk_chinese_ci

 
1、对于包含中文的字段加上"binary"属性,使之作为二进制比较。

CREATE TABLE testtable (
Id int(11) NOT NULL auto_increment,
Name varchar(60) binary default NULL,
PRIMARY KEY  (Id)
) TYPE=MyISAM;

2、在编译MySql源代码的时使用--with--charset=gbk参数,这样MySQL就会直接支持中文查找和排序了。--with--charset=gbk比--with--charset=gb2312好。默认的是latin1,编译时用extra-charsets=gb2312,gbk,其中,用来加入多个字符集。

解决办法代码

 代码如下 复制代码

select name from test1 order by convert(name using gb2312) asc;

您可能感兴趣的文章:
PHP与MYSQL中UTF8 中文排序例子
php数组排序方法大全(脚本学堂整理奉献)
如何让mysql支持中文排序
mysql中的in排序 mysql按in中顺序来排序
mysql中limit、order by和group by的用法实例解析
mysql开启远程连接(mysql开启远程访问)的方法
mysql 按指定字段长度排序的示例代码
高性能mysql(第二版)之查询性能优化
mysql获取当前记录所在行号的方法分享
mysql中utf-8编码数据库转换成GBK编码的问题

[关闭]
~ ~