使用Mysql数据库时,我们常常发现排序字段值含中文时,排序结果往往不是按拼音排序的,达不到我们的效果。
那么如何实现按拼音排序呢?
这要与这个字段对应的字符集有关。(注:Mysql字符集设置支持服务器级,数据库级,表级及字段级)
我们常用的Mysql字符集主要有三种:
第一种是Mysql默认的latin1编码,也即iso8859-1编码。这种编码按中文排序有两种方式:一种是在包含中文的字段加上"binary"属性,使之作为二进制比较,例如将“classname varchar(30)”改成“classname varchar(30)binary”,推荐用这种方式,可以直接用标准SQL就可以,可移值性强;另一种是在排序字段前加binary属性,如 order by binary COLUMN。
第二种是GBK编码,这种编码排序默认就是按拼音排序的,采用标准SQL就可以,不用做任何处理。
第三种是UTF-8编码,这时只能通过在SQL中对字段进行转码,如order by convert(name using gbk) asc,给开发带来了不便,也不利于不同数据库移植。
另外,网上还看到如下方法:
如果使用源码编译MySQL,可以编译MySQL时使用 –with–charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了(默认的是latin1)。也可以用 extra-charsets=gb2312,gbk 来加入多个字符集。
这种方式应该等同于在my.cnf中设编码,就是将整个数据库设成gbk编码,但没有用源码安装过,也没去进行验证。
华丹快速开发平台适应性比较强,以上这三种编码都支持,可以根据情况灵活选用配置。