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

Mysql保存的日期比java应用程序输入的日期早一天,java,mysql,hibernate,tomcat8,Java,Mysql,Hibernate,Tomcat8,我在当前项目(生产)中使用以下规范 操作系统:CentOS 7 数据库:MySql 爪哇8 冬眠 tomcat服务器8 数据库与应用服务器位于不同的服务器中,但两者位于同一LAN中 mysql表中的数据类型是:date用于仅存储日期,而datetime用于随时间保存日期 问题是mysql的保存日期比application提供的日期早1天。到目前为止,我尝试了以下方法,但仍然没有成功: 我已经将应用程序和数据库服务器的时区设置为Asia/Dhaka,并从java应用程序中检查了这一点 我还在tom

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

  • 操作系统:CentOS 7
  • 数据库:MySql
  • 爪哇8
  • 冬眠
  • tomcat服务器8
  • 数据库与应用服务器位于不同的服务器中,但两者位于同一LAN中

    mysql表中的数据类型是:
    date
    用于仅存储日期,而
    datetime
    用于随时间保存日期

    问题是mysql的保存日期比application提供的日期早1天。到目前为止,我尝试了以下方法,但仍然没有成功:

  • 我已经将应用程序和数据库服务器的时区设置为Asia/Dhaka,并从java应用程序中检查了这一点
  • 我还在tomcat服务器(setenv.sh)文件中设置了时区
  • 我还通过log4j属性文件中的跟踪检查了hibernate生成的sql,其中的日期也与输入日期相同
    我错过了什么?有人能提出建议吗?

    感谢大家分享您在这个问题上的经验

    最后,我通过在java web应用程序的
    DispatcherServlet
    中更改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=GMT%2B8
    

    您的应用程序和DB服务器在同一时区?@MyTwoCents:是的,两者都在亚洲/达卡时区。我建议您输入错误。。。由于一开始就很容易设置错误的日期,DB正好晚了一天。。。(并安装
    ntp
    client以确保日期和时间正确)听起来确实有东西在将您的值转换为UTC(即6小时的差异)。这正是我询问数据类型的目的,但MySQL只移动
    时间戳
    数据值的值,所以这不应该受到责备。您没有提供足够的信息。编辑问题以指定列数据类型、显示Java代码、显示JDBC/SQL代码以及显示输入和输出。提示:(a)始终使用java.time类,而不要使用
    日期
    /
    日历
    /
    时间戳
    等类。(b) 永远不要依赖默认时区,始终通过传递可选参数显式指定所需/预期时区。