Java访问MySQL时间早8小时,或者说大8小时,其实是因为时区参数问题,在JDBC连接参数中设置serverTimezone即可解决。

问题分析:

早期的较低版本的springboot 版本,所依赖的MySQl驱动mysql-connector-java版本是 5.1。而升级到 2.1.7 后,默认指定 mysql-connector-java 版本为 8.0.17。

问题的根本原因在于: MySQL8.0的驱动包跟之前版本不一样了,默认时区是全球统一时间 (UTC),北京时间是 UTC+8。

逻辑分析:

我们在东八区的情况,当把东八区的时间认为是UTC的时间,然后再重新转化为本地时间,即东八区的时间,又再加了8小时,所以出来的结果就是时间大8小时了。

解决办法:

在jdbc连接中设置serverTimezone参数,指定为东八区,

可以使用serverTimezone=Asia/Shanghai 或者 serverTimezone=GMT%2b8

如:

jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=GMT%2b8&useSSL=false

关于时区的更多知识,可以参考这篇文章:

Java时间全解