Mysql等数据库对于版本号类型字符串的比较问题的思考
2017-07-27 19:18
387 查看
我现在在一个移动产品部门做移动应用商店的开发,今天突然发现一个bug,那就是mysql数据库比较版本号类字符串时会出问题,正常逻辑是1.10.8比版本1.10.10小,但是按照数据库的字符串比较规则,前者是比后者要大的;由于项目需要查询出版本号大的那条的记录,这样查询出来的结果就有问题了。
当然如何把所有记录查询出来然后再用java处理比较简单,网上还有一些处理版本号的方法,但是由于我所在的项目都是先别sql拼接好,然后一次查询出结果,所以用java代码处理问题需要把那块代码重构,代价比较大;由于我们要兼容mysql,oracle等主流数据库,使用高级函数会引入更多问题,思来想去相当苦恼,还一度想把那块代码重构了...
最后静下心来认真分析了下业务代码,发现应用上传的时候是做了版本号的校验的,就是新上传的应用版本号必须大于旧版本,如第一个版本是1.10.8,下次更新的时候版本要比第一版大,如1.10.10;然后sql查询的时候依然比较版本号查出最新的,但是版本号所在的数据模型里还有其他字段,如上传时间,既然最新上传的应用版本号肯定是最大的,为啥不用max(上传时间)来查询呢...问题就这样解决啦...
复杂的事情简单做,你就是专家...
当然如何把所有记录查询出来然后再用java处理比较简单,网上还有一些处理版本号的方法,但是由于我所在的项目都是先别sql拼接好,然后一次查询出结果,所以用java代码处理问题需要把那块代码重构,代价比较大;由于我们要兼容mysql,oracle等主流数据库,使用高级函数会引入更多问题,思来想去相当苦恼,还一度想把那块代码重构了...
最后静下心来认真分析了下业务代码,发现应用上传的时候是做了版本号的校验的,就是新上传的应用版本号必须大于旧版本,如第一个版本是1.10.8,下次更新的时候版本要比第一版大,如1.10.10;然后sql查询的时候依然比较版本号查出最新的,但是版本号所在的数据模型里还有其他字段,如上传时间,既然最新上传的应用版本号肯定是最大的,为啥不用max(上传时间)来查询呢...问题就这样解决啦...
复杂的事情简单做,你就是专家...
相关文章推荐
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- mysql 字符串类型及二进制字符串类型大小写比较
- 数据库(MSSQLServer,Oracle,DB2,MySql)常见语句以及问题(续1之拼接字符串)
- mysql中字段类型是datetime时比较大小问题
- 关于含有单双引号字符串类型的数据插入mysql遇到的问题
- 解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date
- 搞定MySQL与phpMyAdmin数据库的字符串乱码问题
- C# 中字符串“1.0”和数据库中char(10)类型的字段值“1.0”比较。
- python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题
- python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题
- Mysql 数据库date, datetime类型设置0000-00-00默认值报错问题
- 搞定MySQL与phpMyAdmin数据库的字符串乱码问题
- 对于数据库中表示状态或类型字段表示方法的思考
- 关于值类型、引用类型和字符串类型的比较问题!通过实例来说明!
- 关于数据库连接字符串问题(第二部分连接MySQL)
- Mysql在字符串类型的日期上加上10分钟并和现在的日期做比较
- 对于mysql处理数据库表中一对多的数据统计问题
- zt mysql 字符串类型及二进制字符串类型比较
- mysql中的date类型直接比较大小是按照字符串比较还是时间戳
- mysql创建表时列类型设置为字符串类型的一个小问题