我的MySQL数据库字符集用的UTF-8,此为环境。
做项目时需要用到对查出来的数据按首字母排序,事实上也就是对汉字的拼音按照a--z的顺序进行升序降序排列。
本以为是简单的order by XXX asc/desc,哪知道最后结果并没有按照想象中的排序。
百度才知道,使用utf-8字符集时,汉字排序并不是按照字母顺序的。
select * from (
select "三军" as name
union
select "步拿拿"
union
select "微服务"
union
select "预估工时"
)
a
order by a.name asc;
预计结果
步拿拿
三军
微服务
预估工时
但实际结果为
解决方式有两个:
1.修改数据库字符集,把utf-8改为gbk。
2.修改sql语句:把select * from user order by name desc 改为 select * from user order by convert(name using gbk) desc
这样排序的字段就按照字母顺序排列了。
select * from (
select "三军" as name
union
select "步拿拿"
union
select "微服务"
union
select "预估工时"
)
a
order by convert(a.name using gbk) asc;