博客
关于我
Mysql中varchar类型数字排序不对踩坑记录
阅读量:789 次
发布时间:2023-02-11

本文共 710 字,大约阅读时间需要 2 分钟。

在进行数据库表设计时,字段类型的选择至关重要。对于涉及数字的字段,建议优先选择INT类型,这样可以避免后续处理中出现不必要的麻烦。

然而,版本号字段常常会被设计为VARCHAR类型。这种类型虽然在存储字符时更为灵活,但在排序时可能会带来一些问题。例如,当版本号字段累计到10及以上时,排序时可能会出现异常现象。

例如,执行排序时,10会被排在2的前面。这是因为varchar类型在进行排序时,会按照字符的字典序逐位比较。例如,"10"的第一位字符是'1',而"2"的第一位字符是'2',在字符比较中,'1'会比'2'小,因此"10"会排在"2"的前面。

这种排序方式与我们对数值大小的理解存在显著差异,可能会导致数据排列出现异常。要正确地按照数值大小排序,可以采用CAST或CONVERT函数,将VARCHAR类型转换为数值类型。

例如,可以使用以下SQL语句进行排序:

select * from bus_app_version ORDER BY CAST(app_version AS SIGNED)

通过CAST函数,将app_version字段从VARCHAR转换为有符号整数类型,再按照数值大小进行排序。这样可以确保版本号字段按照实际的数值大小进行排列。

此外,如果需要更高效地处理版本号字段,可以考虑将字段类型从VARCHAR改为INT类型。这样不仅可以避免字符比较带来的问题,还能提升查询性能。

总之,在数据库设计时,合理选择字段类型对于后续数据处理非常重要。对于涉及数字的字段,尽量使用INT类型,而不是VARCHAR。遇到版本号字段时,可以通过转换函数解决排序问题,或者直接将字段类型修改为INT类型。

转载地址:http://cpbfk.baihongyu.com/

你可能感兴趣的文章
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>