1. 程式人生 > 其它 >MySQL報錯:com.mysql.cj.jdbc.util.TimeUtil.loadTimeZoneMappings(TimeUtil.java:163)

MySQL報錯:com.mysql.cj.jdbc.util.TimeUtil.loadTimeZoneMappings(TimeUtil.java:163)

問題:

MySQL資料庫5.6版本,JDBC驅動包mysql-connector-java-5.1.49-bin版本,啟動Tomcat,連線資料庫時,報錯,詳細資訊:

java.lang.NullPointerException
    java.util.Properties$LineReader.readLine(Properties.java:434)
    java.util.Properties.load0(Properties.java:353)
    java.util.Properties.load(Properties.java:341)
    com.mysql.cj.jdbc.util.TimeUtil.loadTimeZoneMappings(TimeUtil.java:
163) com.mysql.cj.jdbc.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:109) com.mysql.cj.mysqla.MysqlaSession.configureTimezone(MysqlaSession.java:308) com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:2474) com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:
1817) com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1673) com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:656) com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:349) com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:
221)

經過查詢,說丟擲異常是因為MySql伺服器時區(繼承自系統時區)的格式與mysql聯結器所期望的格式不同。

解決方法:

將JDBC的URL加入serverTimezone,比如:

jdbc.url=jdbc:mysql://localhost:3306/xuejia?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8

serverTimezone=UTC,其中UTC是統一標準世界時間;中國在東八區,需要指定為中國時區的話,可以將配置修改為serverTimezone=GMT%2B8

關於時區:

UTC,即協調世界時。UTC是以原子時秒長為基礎,在時刻上儘量接近於GMT的一種時間計量系統。為確保UTC與GMT相差不會超過0.9秒,在有需要的情況下會在UTC內加上正或負閏秒。UTC現在作為世界標準時間使用。
GMT:即格林尼治標準時間,也就是世界時。GMT的正午是指當太陽橫穿格林尼治子午線(本初子午線)時的時間。但由於地球自轉不均勻不規則,導致GMT不精確,現在已經不再作為世界標準時間使用。
UTC與GMT基本上等同,誤差不超過0.9秒。

本文參考:https://blog.csdn.net/wangzhihao1994/article/details/100112870