实习记录:MySQL时间偏差问题的发现与解决

12 篇文章 0 订阅
9 篇文章 0 订阅

MySQL时间偏差问题的发现与解决

场景

背景:客户的聊天记录通过已有功能进行解密封装落库
场景:在聊天记录保存时通过kafka发送聊天记录到敏感词模块进行敏感词过滤,当某人触发记录达到阈值时,发生告警卡片,点击告警卡片时根据聊天记录生成的时间去落库信息中查找详情。

触发

发现点击卡片时显示的条目与该卡片展示的数据有时会有+1的误差

排查发现,系统产生卡片使用的时间是生成聊天记录Entity时解析出的时间,而数据库中存储时,时间偶尔会加1秒,就会导致查库少一条记录

场景模拟

实体类
请添加图片描述
表结构
请添加图片描述
表的time字段使用DateTime,实体类使用的Date
插入数据库测试,直接new Date()插入数据库
请添加图片描述
idea日志
请添加图片描述
这里可以看到插入时间是20:51:00
但是查看数据库发现请添加图片描述
存入数据库变成了20:51:01

分析

入库时时间添加了1秒
其实这里的日志很清楚的反映了问题,看毫秒值大于了500,而数据库DateTime默认精度是精确到秒,而它并不会直接去掉毫秒值,而是四舍五入,所以插入记录的时间毫秒值大于500后,进入数据库就会加1秒。

解决

  1. 插入数据库时设置日期毫秒值为0
  2. 修改数据库DateTime为DateTime(3),表示精确到3位毫秒值

实际测试两种方法均生效,但是后者会导致数据库存储毫秒值,而业务需要到秒即可,所以最终使用了方案1.

最后与相关负责人沟通后修改了聊天记录生成时间的逻辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踢足球的程序员·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值