3 回答
TA贡献1801条经验 获得超16个赞
例如,如果您的时区是
Europe/Warsaw
你可以设置:
spring.datasource.url=jdbc:mysql://localhost:3306/database?serverTimezone=Europe/Warsaw
而不是这个:
spring.datasource.url=jdbc:mysql://localhost:3306/database?serverTimezone=UTC
但您也可以在 application.properties 中再添加一项:
spring.jpa.properties.hibernate.jdbc.time_zone=Europe/Warsaw
TA贡献2012条经验 获得超12个赞
谢谢你的帮助。如上所述并回答,这是一个时区问题。
解决方案:
在 MySQL 中设置
SET GLOBAL time_zone = '+02:00';";
?serverTimezone=UTC
从中删除spring.datasource.url=jdbc:mysql://localhost:3306/schema_name
发现这些 MySQL 命令很有用: SELECT @@GLOBAL.time_zone, @@session.time_zone, @@system_time_zone;
和 SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP) as GMT_TIME_DIFF;
附加信息MySQL 是否应将其时区设置为 UTC?在MySQL 文档中。
解决方法
如上所述,更改pom.xmlmysql-connector-java
中的 Spring Boot 默认值:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</>
</dependency>
属性spring.datasource.driverClassName=com.mysql.jdbc.Driver文件中的驱动程序也返回了正确的日期。
TA贡献1794条经验 获得超7个赞
我认为这是因为时区问题。区域设置日期不考虑您已经知道的时区。但在数据库中,我猜日期与时区相关联。JPA/Hibernate 层会将 LocaleDate 转换为 TimeStamp(默认在转换过程中将使用 JVM 时区)。您运行应用程序的时区与数据库时区不同,因此存在不匹配。
要确认这一点,请将运行机器的时区设置为 UTC。
添加回答
举报