前言:最近,因为复习JDBC知识,使用了最新版本的mysql驱动程序(mysql-connector-java.jar),结果出现了之前从未遇到过的问题:The server time zone value ‘?й???’ is unrecognized or represents more than one time zone。出于对未知的好奇,于是在网上查找出现该问题的具体原因,找了很久,浏览了许多文章,最常见的解答是:serverTimezone=UTC、serverTimezone=Asia/Shanghai或者降低mysql驱动程序的版本。但是,几乎没有看到有人解释问题发生的原因,也没有介绍time zone的概念,就只是给出来解决方法。在某篇博文中的评论中,我发现也有人问”为什么要这样设置(serverTimezone)“,有人回答mysql高版本驱动程序需要设置时区,这个答案让我感觉”听君一席话,如听一席话“,属于”废话文学“。最后,只能求助mysql官方文档,发现涉及到内容太多了,但是念念不忘,必有回响。坚持不懈了三天,总算对问题有了全面的认知。
目录
一 、问题发生
系统环境:JDK 1.8、mysql-connector-java 8.0.23(mysql驱动程序)、mysql数据库 8.0.28
代码如下:
String url = "jdbc:mysql://localhost:3306/crashcourse?useUnicode=true&characterEncoding=utf8";
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, "root", "admin");
// 其他与数据库交互的代码省略
在IDEA运行后,出现错误,如下图所示:
二、 问题解决
报错信息中,包含了对解决问题方法的描述。
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.
翻译:如果你想运用时区支持,必须配置服务器或JDBC驱动程序(通