本文共 618 字,大约阅读时间需要 2 分钟。
在sql中我们经常会用到排序,当字段是int或者其它数值类型的时候对该数值进行排序,默认是从大到小进行排序,这个是没什么问题的
但是对varchar类型的字段进行排序的时候,就要谨慎使用。
当varchar存放的是数值的话,默认排序就不会太准确 ,比如下面这种情况
select 排序=状态 from table order by 状态
状态
字段是varchar类型的,存放的是数值。
当字段是varchar
类型的时候会问题,比如下图,101
应该是最大的竟然排在11
前面
原因是varchar
排序并不是简单的比大小,它是一个字符一个字符进行比较排序。
比如
11
和101
首先要比较各自第一个字符1
和1
,当两个字符相同的时候比较第二个字符,1
和0
进行比较,0
比1
小所以101
要排在前面,其它的字符就不用再比较。
01
和11
同理,第一个字符0
和1
进行比较,0
比1
小所以01
这个个数值要排在前面。
有人可能会问怎么不直接设置成int类型,这样排序就不会有问题了。当状态
字段设置成int类型的时候,01
就会变为1
,对于相关业务会有影响。
解决这个问题的方法有两种:
- 将字段设为int类型,谨慎使用varchar类型
- 非要用varchar将字符长度限制在两个字符以内
如果有更好的解决办法,请私信我。
我是时生,一个正在努力的小白。欢迎批评,欢迎指正,欢迎共享。 如果这篇文章对你有帮助,麻烦点个赞呗!
转载地址:http://oxprn.baihongyu.com/