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

相关推荐
万事大吉CC15 分钟前
【3】深入剖析 Django 之 MTV:路径引用与资源加载机制
数据库·django·sqlite
Hical_W20 分钟前
用 Hical + MySQL 5 分钟搭建 CRUD API(C++20 协程版)
数据库·mysql·c++20
AIMath~23 分钟前
agent上下文和模型的上下文区别
数据库
与遨游于天地33 分钟前
分布式锁从Redis到Redisson的演进
数据库·redis·分布式
想唱rap41 分钟前
传输层协议之UDP
java·linux·网络·c++·网络协议·mysql·udp
山峰哥1 小时前
SQL性能提升20倍的秘密:这些优化技巧让DBA都惊叹
开发语言·数据库·sql·编辑器·深度优先·宽度优先
猪脚踏浪1 小时前
mysql 用户授权
mysql
HuDie3402 小时前
prompt模版
数据库·prompt
梦想画家2 小时前
PostgreSQL 图计算双雄:Apache AGE 与 pgGraphBLAS 的融合实战指南
数据库·postgresql·图算法