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

posted @ 2021-10-08 16:05  那些年的事儿  阅读(270)  评论(0编辑  收藏  举报