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