我现在在一个移动产品部门做移动应用商店的开发,今天突然发现一个bug,那就是mysql数据库比较版本号类字符串时会出问题,正常逻辑是1.10.8比版本1.10.10小,但是按照数据库的字符串比较规则,前者是比后者要大的;由于项目需要查询出版本号大的那条的记录,这样查询出来的结果就有问题了。
当然如何把所有记录查询出来然后再用java处理比较简单,网上还有一些处理版本号的方法,但是由于我所在的项目都是先别sql拼接好,然后一次查询出结果,所以用java代码处理问题需要把那块代码重构,代价比较大;由于我们要兼容mysql,oracle等主流数据库,使用高级函数会引入更多问题,思来想去相当苦恼,还一度想把那块代码重构了...
最后静下心来认真分析了下业务代码,发现应用上传的时候是做了版本号的校验的,就是新上传的应用版本号必须大于旧版本,如第一个版本是1.10.8,下次更新的时候版本要比第一版大,如1.10.10;然后sql查询的时候依然比较版本号查出最新的,但是版本号所在的数据模型里还有其他字段,如上传时间,既然最新上传的应用版本号肯定是最大的,为啥不用max(上传时间)来查询呢...问题就这样解决啦...
复杂的事情简单做,你就是专家...