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

相关推荐
城管不管2 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头1062 小时前
向量数据库从相似度检索走向融合数据底座
数据库
今天AI了吗3 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
夜雪一千4 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
lilian2334 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
皮卡丘不断更5 小时前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口
数据库·sqlite·fastapi·开源项目·个人效率
保卫大狮兄6 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备
数据安全技术观察6 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库
小席是个热心肠7 小时前
Redis的自我学习
数据库·redis·学习
2601_965798477 小时前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress