写点什么

MySQL Idea 启动主程序之数据库无法识别时区问题

作者:Andy
  • 2023-05-28
    北京
  • 本文字数:1475 字

    阅读完需:约 5 分钟

一、问题描述


在引入 Apollo 配置开源项目,启动 Java 主程序类 ApolloApplication 时,报出了以下错误:


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:129)	......
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: 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 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85) at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132) at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2243) at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2267) at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319) at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) ... 153 common frames omitted
复制代码


二、问题分析


通过查看报错信息,说明问题是时区无法识别,需要配置。


由此,推断有可能是 ApolloApplication 启动类的配置信息中,访问 MySQL 的参数未设置时区,才导致这个问题。


为了验证,故而检查了 ApolloApplication 类的配置信息,如图所示:



发现 VM options 参数中的 -Dspring.datasource.url ,并未配置时区信息。


这也说明了,在访问 MySQL 时,应当配置完整的参数信息,避免一些不必要的错误。因此,特意在 -Dspring.datasource.url 上补全了所有可能需要的信息,即:


jdbc:mysql://localhost:3306/ApolloPortalDB?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
复制代码


完整 VM options 配置如下:


-Dapollo_profile=github,auth-Ddev_meta=http://localhost:8080/-Dserver.port=8070-Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloPortalDB?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8-Dspring.datasource.username=root-Dspring.datasource.password=root
复制代码


三、启动验证


重新配置后,再次启动,可以正常访问数据库了。


用户头像

Andy

关注

强准备+强信念+强执行 2019-11-21 加入

以前是T型人才,当下是π型人才,未来是梳子型人才

评论

发布
暂无评论
MySQL Idea启动主程序之数据库无法识别时区问题_Andy_InfoQ写作社区