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