1. 程式人生 > 其它 >JDBC連線報錯:java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized...解決方案

JDBC連線報錯:java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized...解決方案

技術標籤:JavaBUG解決合集mysqljavajdbc資料庫mybatis

JDBC連線報錯:java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized…解決方案


先上解決方案

在JDBC連線的url中加上useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

最初我的url是這麼寫的

String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";

這時我在後面使用&加上後續的配置之後便可以用了。

String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
;

問題解決!!!!


原因分析

那麼究竟是什麼原因導致的呢?查閱了許多博主的文章分析之後發現最根源的問題還是MySQL的時區和JDBC的驅動不相容(好傢伙,MySQL還有時區???)

這裡我用的版本是:

  • MySQL 5.7版本
  • JDBC驅動8.0.11版本

那麼是否是因為JDBC驅動版本太高了呢?

我換了之前使用的JDBC 5.1.7 版本,不報錯。(好傢伙,好一個向下相容)

也就是說,如果想要解決此類問題,那麼有兩種方法“

  • 向上述方法一樣,通過配置來指定服務連線的時間。
  • 一勞永逸的解決此類方法,原因就是MySQL在安裝的時候驅動時區預設是美國時間,北京時間比美國那邊晚了八小時,我們就修改掉我們MySQL的配置。找到MySQL配置檔案中的my.cnf,然後在mysqld下邊的配置中新增一行:default-time_zone = ‘+8:00’

這點要注意,如果我們將驅動改為GMT+8時區,那麼我們需要這麼寫:serverTimezone=GMT%2B8";