背景知识:

我有一个运行在Tomcat 7上的Java 1.6 web应用程序。数据库为MySQL 5.5。之前,我使用Mysql JDBC驱动程序5.1.23连接到DB。一切工作。我最近升级到Mysql JDBC驱动程序5.1.33。升级后,Tomcat在启动应用程序时会抛出这个错误。

WARNING: Unexpected exception resolving reference
java.sql.SQLException: The server timezone value 'UTC' is unrecognized or represents
  more than one timezone. You must configure either the server or JDBC driver (via
  the serverTimezone configuration property) to use a more specifc timezone value if
  you want to utilize timezone support.

为什么会这样?


当前回答

在我的例子中,它是一个测试环境,我必须让一个现有的应用程序在没有任何配置更改的情况下工作,如果可能的话,没有任何MySQL配置更改。 我能够通过遵循@vinnyjames的建议并将服务器时区更改为UTC来修复这个问题:

ln -sf /usr/share/zoneinfo/UTC /etc/localtime
service mysqld restart

这样做对我来说已经足够解决问题了。

其他回答

我在LibreOffice基地也遇到了同样的问题。所以我只是在连接字符串中指定了一个非“夏时制时区”。

我尝试没有“&serverTimezone=MST”,但也失败了。

我还尝试了“&serverTimezone=MDT”,失败了,所以出于某种原因,它不喜欢夏令时!

我通过配置MySQL解决了这个问题。

SET GLOBAL time_zone = '+3:00';

我在/etc/mysql/my.cnf文件中添加了以下一行:

default_time_zone='+00:00'

重启MySQL服务器:

systemctl restart mysql

它就像一个魔法。

将服务器时间设置为UTC没有影响(例如使用jdbc:mysql://localhost:3306/myschema?serverTimezone=UTC,即使您的应用程序/数据库服务器不在这个时区。重要的是应用程序连接字符串+数据库要与相同的时区同步。

换句话说,只需在数据库服务器上使用不同的时区设置serverTimezone=UTC,就可以转移从数据库中提取的任何日期

这对我很管用。

在DBeaver 6.0上:进入“连接设置”>驱动程序属性>服务器时区>设置UTC时间。

另外,在春季启动配置中,必须设置下面的属性。

jdbc: mysql: / / localhost: / ?serverTimezone = UTC