【问题标题】:MySQL JDBC Driver 5.1.33 - Time Zone IssueMySQL JDBC 驱动程序 5.1.33 - 时区问题
【发布时间】:2014-12-18 09:21:18
【问题描述】:

一些背景:

我有一个在 Tomcat 7 上运行的 Java 1.6 webapp。数据库是 MySQL 5.5。以前,我使用 Mysql JDBC 驱动程序 5.1.23 连接到数据库。一切正常。我最近升级到 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.

为什么会这样?

【问题讨论】:

  • 你的 JDBC URL 是什么样的?

标签: java mysql tomcat jdbc timezone


【解决方案1】:

连接字符串对我有用

jdbc:mysql://localhost/<yourDbName>?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

我正在使用 Gradle 我的 build.gradle 文件是这样的

dependencies {
    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.17'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

【讨论】:

    【解决方案2】:

    同意@bluecollarcoder 的回答,但最好在连接字符串的末尾使用TimeZone.getDefault().getID();

    "jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=" + TimeZone.getDefault().getID();  
    

    在这种情况下,Timezone 参数会根据本地机器时区自动更新。

    【讨论】:

    • 这是不正确的。 useLegacyDatetimeCode=false 的要点是不必指定 serverTimezone 以便客户端更正时区差异。
    【解决方案3】:

    我的.ini

    最后添加这一行:

    default-time-zone = '+05:30'
    

    从终端运行此命令

    >> sudo mysql -e "SET GLOBAL time_zone = ‘+5:30’;" -u root
    >> sudo mysql -e "SELECT @@global.time_zone;" -u root
    

    如果它们都不起作用,请尝试使用终端使用来自 sqoop 的此请求

    >> sqoop list-databases --connect "jdbc:mysql://localhost/employees?serverTimezone=UTC" --username sqoop -P
    

    或者你可以用这个替换你的请求 URL

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

    【讨论】:

      【解决方案4】:

      我还在 NetBeans 中获得了相同的运行 java JDBC。就是这样解决的

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

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

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

      停止并启动 Apache 和 MySQL

      问题已解决。

      *(本地机器时区不同,但没问题。)

      【讨论】:

        【解决方案5】:

        只需在application.properties文件中用以下代码修改连接字符串即可。

        
        spring.datasource.url=jdbc:mysql://localhost:3301/Db?
           useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=
           false&serverTimezone=UTC
        
        

        【讨论】:

          猜你喜欢
          • 2012-03-10
          • 1970-01-01
          • 1970-01-01
          • 2011-09-10
          • 2016-03-27
          • 2019-12-27
          • 2011-06-23
          • 2013-02-17
          • 2010-10-15
          相关资源
          最近更新 更多