有时分会遇到需求依照汉字拼音排序的要求。
假如要排序的字段编码运用的是GBK字符集,那就能够直接依照拼音排序。由于GBK内码编码时自身就选用了拼音排序的办法(常用一级汉字3755个选用拼音排序,二级汉字就不是了),直接在查询句子后边增加ORDER BY name ASC,查询成果将依照姓氏的升序排序。
假如存储名字的字段选用的是utf8字符集,,需求在排序的时分对字段进行转码,对应的代码是ORDER BY convert(name using gbk) ASC,相同,查询的成果也是依照汉字拼音的升序排序。
比方有如下一张表:
CREATE TABLE `collation_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`pin_yin ` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
表中数据如下:

现在履行
select * from collation_test order by name asc
结果如下:

显着没有依照拼音排序,所以改为履行如下SQL
select * from collation_test order by convert(name using gbk) asc
结果如下:

现已是依照拼音排序了。
也能够经过修正name字段的字符集为gbk来完成,如下图:

此刻建表句子改为了
CREATE TABLE `collation_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET gbk DEFAULT NULL,
`pin_yin` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
然后咱们直接履行
select * from collation_test order by name asc
结果如下:

可见现已依照拼音排序好了。A8站源码交易平台
假如字段的值中包括数字和字母也能够排序,由于数字和字母在gbk字符会集自身便是能排序的,数字<字母<汉字,如下图:
