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类型进行修改。

相关推荐
椰椰椰耶10 分钟前
【redis】全局命令set、get、keys
数据库·redis·缓存
月落星还在18 分钟前
Redis 内存淘汰策略深度解析
数据库·redis·缓存
左灯右行的爱情22 分钟前
Redis- 切片集群
数据库·redis·缓存
LKAI.23 分钟前
MongoDB用户管理和复制组
linux·数据库·mongodb
PinkandWhite1 小时前
MySQL复习笔记
数据库·笔记·mysql
熬夜苦读学习1 小时前
库制作与原理
linux·数据库·后端
cmgdxrz2 小时前
Mysql中的常用函数
数据库·mysql
Amy.com2 小时前
Linux16-数据库、HTML
jvm·数据库
无敌发光大蟒蛇3 小时前
MySQL第一次作业
android·数据库·mysql
曹二7473 小时前
Spring-事务
数据库·spring·oracle