首页 > 数据库 > 数据库开发技术 > 连开100年会员会怎样
有一类BUG,不是功能性的,在用户使用过程中也不会遇到,但是一些测试用例还是会覆盖到,当然也有不改的,因为不会对用户有什么影响。
分享一个“BUG”,用户的VIP到期时间最大只能到2038年的某一天。
场景就是在用户不断地购买VIP时,在2038年某一次购买失败。
业务场景如下:用户购买一个月VIP,VIP到期时间往后延长30天,如果之前不是VIP,当前时间戳往后延长30天,花费若干。
当时设计测试用例为了验证系统的交易风险控制中的额度控制和购买VIP整个流程的稳定性验证,写了一个for循环,一直在不停地购买VIP。
数据库存储比较简单,每个用户(如果存在)都有一条记录,用来记录用户VIP状态,字段也简单,就是记录用户VIP的到期时间以及其他信息。购买记录和交易记录都在另外的表存储(跟这个“BUG”没有关系)。
BUG原因:在存储时间戳时,使用的int类型表示到期时间,mysql int 有符号位支持的最大长度是 2147483647;即2038-01-19 11:14:07(北京时间) 已经达到了最大存储值,导致无法保存正确的时间。
解决方案:不搭理他,就当不存在。
虽然是无心插柳发现的“BUG”,也并没有解决掉,但是依然觉得非常有趣。
原文作者:FunTester;如有侵权,请联系管理员删除。