1.前言
今天在用SpringBoot2.0+MyBatis+MySQL搭建項目開發環境的時候啟動項目發現報了一個很奇怪的錯,報錯內容如下:
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1558) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1623) at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2468)
后來查閱資料發現這都是因為安裝mysql的時候時區設置的不正確 mysql默認的是美國的時區,而我們中國大陸要比他們遲8小時,采用+8:00格式
使用的數據庫是MySQL,從上面圖看出SpringBoot2.1在你沒有指定MySQL驅動版本的情況下它自動依賴的驅動是8.0.12很高的版本,這是由於數據庫和系統時區差異所造成的,在jdbc連接的url后面加上serverTimezone=GMT即可解決問題,如果需要使用gmt+8時區,需要寫成GMT%2B8,否則會被解析為空。再一個解決辦法就是使用低版本的MySQL jdbc驅動,5.1.28不會存在時區的問題。
2.解決辦法
1.修改MySQL的配置文件,MySQL配置文件是my.ini文件在你的安裝目錄下去找,我的是在C:\Program Files (x86)\MySQL\MySQL Server 5.5\my.ini
找到這個文件之后用Notepad++打開它,搜索[mysqld]節點在節點下面加上下面這句話
default-time-zone='+08:00'
然后記得重啟MySQL的服務,打開cmd窗口登錄MySQL執行show variables like '%time_zone%';這句命令
2.直接在mysql執行語句:
set global time_zone='+8:00'
注意:若是在ubuntu環境下,直接在my.cnf文件中添加該行代碼即可。