问题
先来看一下数据库存储的数据
共六条测试数据,code列的值分别是测试10、测试2、测试12、测试1、测试11、测试3
现在想得到如下图的查询结果
即查询到的顺序是测试1、测试2、测试3、测试10、测试11、测试12
解决方案
先来看一下最先想到的sql
SELECT * FROM park_test ORDER BY `code` asc
得到的结果是
很明显和我们预想的不一样,为什么呢?
就是当mysql字段类型是字符串类型时,在默认情况下使用order by 字段名称 desc/asc 进行排序的时候,mysql进行的排序规则是按照ASCII码进行排序的,并不会自动的识别出这些数据是数值或者包含数值,所以不是我们期望的结果。
怎么办呢?
现改进sql如下
SELECT * FROM park_test ORDER BY LENGTH(`code`),`code` asc
得到的结果就是我们想要的了。
在百度的时候,发现有一些问题是数据库的某一列存的值全部都是数值类型,但是字段类型是字符串类型,在排序或者取此列的最大最小值时也会有类似的问题。
解决方案参考:(我觉得最好还是在表设计的时候用数值类型存储比较好。)
https://blog.csdn.net/butterfly5211314/article/details/78701082
https://www.cnblogs.com/codefly-sun/p/5898738.html