MySQL datetime 精度

探讨了在使用数据库存储时间戳时遇到的四舍五入问题,揭示了如何精确存储yyyy-MM-dd23:59:59的时间戳而不发生意外的秒级跳变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目上需要存储一个截止时间,我和前端约定返回当天的最后一秒,即"yyyy-MM-dd 23:59:59"(实际是Date数据类型,返回的是一个时间戳)。于是,前端返回1552319999999,通过工具查看结果如下在这里插入图片描述
OK,没有问题,确实是返回了"yyyy-MM-dd 23:59:59"。但是测试反馈,时间存储不对,数据库显示的是
在这里插入图片描述
what? 难道程序处理增加时间了?

首先查看日志,从日志上看时间正确,没有问题。显然是存储到数据库后时间增加了1秒。
首先查看表结构,数据库使用的datetime数据类型,该类型精度支持到秒,等等,1552319999999[“2018-03-11 23:59:59”]这个数据和"2018-03-12 00:00:00"不是相差一秒,而是一毫秒,只是1552319999999[“2018-03-11 23:59:59”]展示的时候去掉了999毫秒,所以数据库存储1552319999999时四舍五入,存入"2018-03-12 00:00:00"。
关于四舍五入这点,我们做了一个实验,我向数据库存入两个时间戳:1552116200499和1552116200500,然后在数据库中可以看到
在这里插入图片描述
嗯,500是临界点,大于等于500入一秒,小于500舍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值