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
date
用于仅存储日期,而datetime
用于随时间保存日期
问题是mysql的保存日期比application提供的日期早1天。到目前为止,我尝试了以下方法,但仍然没有成功:
我错过了什么?有人能提出建议吗?感谢大家分享您在这个问题上的经验 最后,我通过在java web应用程序的
DispatcherServlet
中更改mysql连接字符串的serverTimezone
属性来解决这个问题
<property name="url" value="jdbc:mysql://x.x.x..x:3306/dbname?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Dhaka" />
也许您可以尝试更改
服务器时区
:
serverTimezone=GMT%2B8
您的应用程序和DB服务器在同一时区?@MyTwoCents:是的,两者都在亚洲/达卡时区。我建议您输入错误。。。由于一开始就很容易设置错误的日期,DB正好晚了一天。。。(并安装
ntp
client以确保日期和时间正确)听起来确实有东西在将您的值转换为UTC(即6小时的差异)。这正是我询问数据类型的目的,但MySQL只移动时间戳
数据值的值,所以这不应该受到责备。您没有提供足够的信息。编辑问题以指定列数据类型、显示Java代码、显示JDBC/SQL代码以及显示输入和输出。提示:(a)始终使用java.time类,而不要使用日期
/日历
/时间戳
等类。(b) 永远不要依赖默认时区,始终通过传递可选参数显式指定所需/预期时区。