SQL中varchar类型排序的规则(深坑)
在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将字符长度限制在两个字符以内
如果有更好的解决办法,请私信我。
我是时生,一个正在努力的小白。欢迎批评,欢迎指正,欢迎共享。 如果这篇文章对你有帮助,麻烦点个赞呗!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/195158.html