最近很多次遇到 The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
這個問題,
報錯為:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! ### The error may exist in com/wj/mapper/UserLoginMapper.xml ### The error may involve com.wj.mapper.UserLoginMapper.selectByName ### The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service(HttpServlet.java:650) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
root cause
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. com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127) com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87) com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61) com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71) com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76) com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444) com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175) com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220) com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206) com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203) com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
網上的說
法也很多,經過測試,有效的一個辦法如下:
即可解決這個錯誤!
java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more
1 報錯代碼:
加載類“com.mysql.jdbc.Driver”。這已被棄用。新的驅動程序類是`com.mysql.cj.jdbc.Driver'。駕駛員通過SPI自動注冊和驅動程序類的
連接數據庫...星期六6月2日10時47分02秒CST 2018 WARN:建立無服務器的身份驗證SSL連接不推薦使用。根據MySQL 5.5.45 +,5.6。 26+和5.7.6+的要求,如果未設置顯式選項,則必須默認建立SSL連接。為了符合不使用SSL的現有應用程序,verifyServerCertificate屬性設置為'false'。您需要通過設置useSSL = false顯式禁用SSL,或者設置useSSL = true並為服務器證書驗證提供信任庫。java.sql.SQLException
:服務器時區值'???ê×?? ?? ??” 無法識別或代表多個時區。如果要利用時區支持,則必須 配置服務器或JDBC驅動程序(通過serverTimezone配置屬性)以使用更具體的時區值。在com.mysql.cj.jdbc.exceptions。 SQLError.createSQLException(SQLError.java:127)在com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
2 錯誤截圖:
3 工具版本:
mysql - 5.7.21
JDBC驅動:MySQL的的連接器的Java的8.0.11.jar
4 錯誤分析:
出現這種錯誤一般是JDBC驅動版本的原因
5錯誤1:
加載類“com.mysql.jdbc.Driver” 。這已被棄用。新的驅動程序類是`com.mysql.cj.jdbc.Driver' 驅動程序通過SPI自動注冊,通常不需要手動加載驅動程序類。
解決方法:這個問題很簡單按照它的提示把代碼中com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver就可以了
修改前代碼:
static final String JDBC_DRIVER =“com.mysql.jdbc.Driver”;
修改后代碼:
static final String JDBC_DRIVER =“com.mysql.cj.jdbc.Driver”;
錯誤2:Sat Jun 02 11:40:45 CST 2018 WARN:建議不建立服務器身份驗證的SSL連接。根據MySQL 5.5.45 +,5.6.26 +和5.7.6+的要求,如果未設置顯式選項,則必須默認建立SSL連接。為了符合不使用SSL的現有應用程序,verifyServerCertificate屬性設置為'false'。您需要通過設置useSSL = false顯式禁用SSL,或者設置useSSL = true並且為服務器證書驗證提供信任庫。
解決方法:
這是一個警告 ,即在原來的數據庫名稱后面添加:?useUnicode=true&characterEncoding=utf-8&useSSL=false
修改前代碼:
static final String DB_URL =“jdbc:mysql:// localhost:3306 / runoob”;
修改后代碼:
-
static final String JDBC_DRIVER =“com.mysql.cj.jdbc.Driver”;
-
static final String DB_URL =“jdbc:mysql:// localhost:3306 / runoob?useUnicode = true&characterEncoding = utf-8&useSSL = false”;
錯誤3:
java.sql.SQLException中:服務器時區值'??? EE×??±??' 。無法識別或代表多個時區如果要利用時區支持,則必須配置服務器或JDBC驅動程序(通過serverTimezone配置屬性)以使用更具體的時區值。
解決方法:
這是由於數據庫和系統時區差異所造成的,在JDBC連接的URL后面加上serverTimezone = GMT即可解決問題,如果需要使用GMT + 8時區,需要寫成GMT%2B8,否則會被解析為空。再一個解決辦法就是使用低版本的MySQL jdbc驅動,
修改前代碼:
-
static final String JDBC_DRIVER =“com.mysql.cj.jdbc.Driver”;
-
static final String DB_URL =“jdbc:mysql:// localhost:3306 / runoob?useUnicode = true&characterEncoding = utf-8&useSSL = false”;
-
static final String JDBC_DRIVER =“com.mysql.cj.jdbc.Driver”;
-
靜態最后弦樂DB_URL =“?JDBC:MySQL的: //本地主機:3306 / runoob了useUnicode =真的characterEncoding = UTF-8&useSSL =假serverTimezone = GMT“;
最后問題解決: