背景知识:

我有一个运行在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.

为什么会这样?


当前回答

修复serverTimezone问题所需的一切:

String url = "jdbc:mysql://localhost:3306/db?serverTimezone=" + TimeZone.getDefault().getID()

其他回答

我正在使用mysql-connector-java-8.0.13,遇到了同样的问题。 我在命令行控制台创建了我的数据库,并在命令行上使用@Dimitry Rud的解决方案解决了这个问题:

SET GLOBAL time_zone = '-6:00';

我不需要重新启动任何东西,设置时间并立即在eclipse中运行我的代码,它连接起来没有任何问题。

这个错误应该在旧版本中得到修复,但我想我得到了这个错误,因为我在控制台中创建数据库后,我没有设置这个。我没有使用工作台或其他应用程序来管理这个,而不是控制台。

连接字符串应该像这样设置:

jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

如果你在xml文件(如persistence.xml, standalone-full.xml等)中定义连接,你应该使用&或者使用CDATA块。

我解决了把下面的连接字符串在URL

jdbc:mysql://localhost:3306/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

我也得到了相同的运行java JDBC在NetBeans。这就是它如何修复的

我使用Xampp。在Apache的conf按钮中,我打开httpd.conf文件,并在第一行输入

# Set timezone to Europe/Athens UTC+02:00 
SetEnv TZ Europe/Athens.

在MySQL的conf按钮中,我打开了我的.ini文件,在最后一行我输入 “欧洲/雅典”

停止并启动Apache和MySQL

固定的问题。

*(当地机器时区不同,但没有问题)

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

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

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