Mysql中varchar类型数字排序不对踩坑记录

场景

在进行表设计时将版本号字段设计了为varchar类型,尽量从表设计阶段将数字类型列设计为int型。

再进行排序时如果版本号累计到了10及以上,那么再进行排序时则会出现问题。

比如下面执行排序时发现10被排在了第一位。

这是因为

varchar类型对数字进行排序,是从第一位开始每一位依次比较来进行排序的

会按照字符的字典顺序进行,而不是数值大小。例如,10会被排在2之前,因为在字符串比较中,1大于2。

解决方法:

为了正确地按照数值大小排序,可以使用CAST或CONVERT函数,将VARCHAR类型转换为数值类型

select * from bus_app_version ORDER BY CONVERT(app_version, SIGNED)

这里使用了一个函数CONVERT(score,SIGNED),实现的功能是把score字段转化为int类型再进行排序

或者直接将varchar类型进行修改。

相关推荐
无为之士3 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
小汤猿人类17 分钟前
open Feign 连接池(性能提升)
数据库
阳冬园38 分钟前
mysql数据库 主从同步
数据库·主从同步
XiaoH2331 小时前
培训机构Day15
sql·mysql
ThisIsClark1 小时前
【后端面试总结】MySQL主从复制逻辑的技术介绍
mysql·面试·职场和发展
Mr.132 小时前
数据库的三范式是什么?
数据库
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Python之栈2 小时前
【无标题】
数据库·python·mysql
风_流沙2 小时前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
亽仒凣凣2 小时前
Windows安装Redis图文教程
数据库·windows·redis