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

相关推荐
troy1287 小时前
向量数据库选型指南:Milvus / Qdrant / Chroma / pgvector
数据库·milvus
彧azz7 小时前
Redis 全面指南:从核心概念到高可用架构实战
数据库·redis·架构
DBA小马哥8 小时前
MongoDB 数据同步怎么做?oplog、Change Streams、同步工具 4 种方案一次讲清(附踩坑清单)
数据库·mongodb
服务端相声演员9 小时前
in子查询的执行可能被优化为连接查询
mysql
香菜TTT9 小时前
Redis的哨兵机制
java·数据库·redis
风哥2号10 小时前
数据库教程FGMT13‑Oracle性能优化之数据仓库与分区表
数据库·oracle·性能优化
玉宇夕落10 小时前
Docker + Milvus,数据库永久存放记忆,让对话历史永不丢失
数据库·docker·llm
Zenova EdgeOS11 小时前
工业网关数据持久化:从同步到 WAL 的工程实战
网络·数据库·oracle
企查查数据服务11 小时前
全军禁入下客商准入风控,关联图谱与穿透核查
大数据·开发语言·数据库·php