在我的spring boot(2.1.4)项目中,我具有mysql数据库(5.7.21-服务器版本)和以下应用程序属性:
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC
和
hibernate.jdbc.time-zone=UTC
。
现在,当我使用Java使用@CreationTimestamp
保存实体记录(通过使用@PostConstruct
或某些控制器/服务逻辑)时,日期已正确转换为UTC
时区并保存了do数据库,并以UTC
格式检索(如我所愿)。但是,当我通过data.sql
文件添加(其他)记录时。相应的时间戳字段也具有UTC时区,但是这次时间未正确转换为UTC(这只是我当前的时间,时区设置为UTC)。
如何正确设置这两种情况,以始终将本地时间转换为UTC,保存并始终从数据库中将其作为UTC检索?
更改mysql全局时区是否可以解决该问题?
示例:
我在时区:GMT + 2 在11:11:53保存的记录具有以下设置时间:
1。)Java创建的记录:09:11:53
2。)data.sql创建记录:11:11:53
两者都位于UTC时区(当在客户端中获取时,我可以看到它),但只有第一个是正确的。
答案 0 :(得分:1)
将全球时区设置为UTC可以解决此问题(所有时间戳现在都设置为 UTC ,在我的本地时间中显示,但是以 UTC的形式检索(来自数据库),满足我的条件并针对java
和data.sql
原始记录进行了统一。
要在Windows上执行此操作,我必须从此处下载时区sql文件: https://dev.mysql.com/downloads/timezones.html
,然后运行:
mysql -D mysql -uroot -pmypassword < timezone_posix.sql
SET @@global.time_zone = UTC;
这篇文章也对我有很大帮助:
How to set correct MySQL JDBC timezone in Spring Boot configuration