test
----------------------------
id | name | age
----------------------------
1  | judy | 18
----------------------------
2  | tom  | 21 
----------------------------
3  | judy | 19
----------------------------

select * from test order by age

上图所示,明明是按照降序排列的,为什么会出现这种混乱的排序呢?

原因:age 这个字段在数据库中储存的类型是VARCHAR,这种类型的字段,mysql在使用order by进行查询时,是根据字符进行排序的,第一个字符大的在前面,依次类推,所以就会出现如上图的排序。

解决:

1.改变类型为tinyint

2.不改变类型,但要想得到int类型的排序

select * from test order by age+0 desc

作者 admin

百度广告效果展示