serverTimeZone设置的作用:就是告诉web应用,数据库服务的时区是什么。
如果不在application配置文件中设置serverTimeZone的话,那么会在第一次连接数据库的时候,获取数据库设置的serverTimeZone,如果数据库没有设置serverTimeZone则数据库会报错

1.创建数据库连接时

jdbc会先尝试和数据库创建链接,创建链接之后,数据库会返回数据库的system_time_zone和time_zone设置,然后去取jdbc url中的serverTimezone配置,如果该配置不为空,则会优先将url中的serverTimezone设置为当前数据库连接会话的数据库时区。

2.对Date类型的数据进行操作时

jdbc会根据serverTimeZone自动将时间转换成数据库端的时间后放入到数据库中,取的时候会根据serverTimeZone自动将数据库中的时间转换成jdbc服务端的时间
例子:

服务器时区:UTC+8时区
serverTimeZone:UTC+0时区
1.这时候在代码中插入一个10:00的时间到数据库,jdbc会根据serverTimeZone=UTC+0,服务器8个小时,所以插入到数据库的时间是10:00-8:00=2:00

注意:以上的设置都只是针对Date类型的数据的分析,由于JDK8新增了LocalDateTime类型的数据,serverTimeZone对LocalDateTime类型的数据分析见另一篇 记一次JAVA问题排查:查询出来的LocalDateTime类型时间不受serverTimezone影响

参考引用:https://www.jb51.net/article/187086.htm
https://blog.csdn.net/qq_38340601/article/details/104722575

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐