单个字段排序
-- 正序排序
select * from table order by cloumn (asc)
-- 倒序排序
select * from table order by cloumn desc
注意:默认是正序排列,所以
asc
可忽略
两个及以上字段排序
-- 都按照正序排序
select * from table order by cloumn1 (asc), cloumn2 (asc) ...
-- 都按照倒序排序
select * from table order by cloumn1 desc, cloumn2 desc ...
-- 倒序和正序混合排序
select * from table order by cloumn1 (asc), cloumn2 desc ...
中文排序
由于数据库编码通常都是UTF-8
格式,数据库的排序方式其实是对字段的十六进制字符串进行排序的,如果我们按照普通排序方式直接对中文字段排序,那我们得到数据排序方式一定不是按照中文拼音排序的,我们看下面这个sql语句
mysql> select countryname, hex(countryname) from country order by countryname asc
+-----------+------------------+
| 中国 | E4B8ADE59BBD |
| 法国 | E6B395E59BBD |
| 美国 | E7BE8EE59BBD |
| 英国 | E88BB1E59BBD |
+-----------+------------------+
从查询结果看,是对countryname
转换十六进制字符串进行正序排序的,而不是对countryname
进行正序排序的。如何解决对中文字段的排序的问题呢?其实可以在查询的时候,通过convert函数,把查询出来的数据使用的字符集gbk编码,然后对convert后的中文进行排序即可
-- 正序排序
select * from country order by convert(countryname, using gbk) (asc)
-- 倒序排序
select * from country order by convert(countryname, using gbk) desc
网友评论