在Mysql中对某一个字段进行排序的时候,发现使用order by 语句之后数据竟然是乱序的。
问题原因:
我的表中的sort_num字段的类型设置成了varchar类型。Mysql默认只对数字和日期类型进行排序。
解决方法:
如果要想对String类型的数据进行排序,需要将其转化成其他类型的数据。例如可以将语句更改成:
select * from fz_debug_busi order by (sort_num +0 )
因为 +0 后,在统计的时候会将varchar类型的sort_num转化成int类型的数据。
问题延申:
如果列中存储的内容为汉字呢,能按照拼音进行排序吗?答案是不一定,因为存储时一般都将数据库的字符集设置为utf-8。而这种编码格式不能根据汉字的拼音进行排序,需要将其转化为GBK进行汉字的拼音排序。例如:
select * from fz_debug_busi order by CONVERT(sort_nun USING gbk);
使用这种方式即可实现,汉字的pinyin排序。