MySQL驱动中关于时间的坑

在使用JDBC操作包含LocalDateTime字段的MySQL数据库时,遇到时间存储问题,存储的日期比实际少14个小时。经过排查,发现是由于MySQL数据库默认时区设置为CST,而非东8区。通过修改数据库时区或升级驱动至8.0.26可解决此问题。此外,注意到不同版本的MySQL驱动处理LocalDateTime的方式不同,这也可能导致时间处理差异。建议谨慎升级驱动以避免兼容性问题。
摘要由CSDN通过智能技术生成

背景:MySQL 8.0数据库;

最近在做一个小框架,因为本身比较精简,就没有引入太多依赖,直接用了JDBC来操作数据库,因为我的表中有一个 datetime 类型的字段,对应的Java代码中使用的是 java.time.LocalDateTime ,在处理这个日期字段的时候,就遇到了一个有趣的问题;

在我的数据库表建好后,在Java中使用JDBC原生API实现了一个repository,包含一些数据库的操作,因为代码中有 java.time.LocalDateTime 字段,在使用 java.sql.PreparedStatement 的时候不确认 java.sql.PreparedStatement.setObject(int, java.lang.Object) 方法接收 java.time.LocalDateTime 类型的入参后是否可以正确处理,就写了一小段测试用例来测试,核心代码如下:

preparedStatement.setObject(1, LocalDateTime.now());

一行简单的JDBC调用设置参数,参数类型是LocalDateTime,最终发现没有报错,如果一切OK,那么事情到这里就结束了,但是…….

当我到数据库查看数据的时候,发现日期竟然不对,日期存到数据库后竟然少了14个小时,整整14个小时&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值