Mysql 保存日期比 java 应用程序输入的日期早 1 天

Mysql is saving date 1 day earlier date that provided from input from java application

我在当前项目(生产)中使用以下规范

  1. OS: 分OS 7
  2. 数据库:MySql
  3. Java 8
  4. 休眠
  5. tomcat 服务器 8

数据库与应用程序服务器位于不同的服务器中,但两者位于同一局域网中。

mysqltable中的数据类型是:date仅用于存储日期,datetime用于与时间一起保存日期。

问题是 mysql 每隔比应用程序提供的日期早 1 天保存一次。到目前为止,我已经尝试了以下方法,但仍然没有成功:

  1. 我已将应用程序和数据库服务器的时区设置为 Asia/Dhaka,并从我的 java 应用程序中也进行了检查。
  2. 我还在 tomcat 服务器 (setenv.sh) 文件中设置了时区。
  3. 我还在 log4j 属性文件中检查了 TRACE 从休眠生成的 sql,其中日期也与输入日期相同。

我错过了什么?有人可以建议吗?

感谢大家就此问题分享您的经验。

最后,我通过更改 java 网络应用程序 dispatcher-servlet 中 mysql 连接字符串的 serverTimezone 属性解决了这个问题。

<property name="url" value="jdbc:mysql://x.x.x..x:3306/dbname?characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Dhaka" /> 

也许你可以尝试更改 serverTimezone:

serverTimezone=GMT%2B8