MySql数据库记录相差14小时排错:第2次解决过程

今天,又遇到 数据库的时间和 界面查询出来的时间,不一致。大概相差14小时的问题。

之前已经解决过1次这个问题了,https://blog.csdn.net/FansUnion/article/details/91387701

1、所以这次,很快就大概知道 最可能的问题原因了。

2、确认代码,查询数据库 一个sql语句,然后把Map转换成Java 实体类。

最早用jdbc的时候,确认 Map接收,datetime日期 为 自动转换成 java.util.Date 没问题。

再把Map转换成 Java实体类,Date应该没问题。

然后,把date转换成 ymd hms 时间格式。

不太可能是代码问题。

3、看数据库驱动配置,已经用了 

oa.jdbc.driver : com.mysql.cj.jdbc.Driver

pom.xml

<!-- mysql -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>

4、再次排除可能的代码问题。

同样的sql语句,通过 mysql控制台查询,显示正常。

这次用 字符串,不用java的 date类型。

还是不行。

实在不可能是 java 代码问题。

5、再次确认驱动,发现了问题

spring.datasource.contract.driver-class-name: com.mysql.cj.jdbc.Driver

# oa数据库
oa.jdbc.driver : com.mysql.cj.jdbc.Driver

项目中有2个数据源,oa数据库,这个用的是 最早先的 com.mysql.jdbc.Driver。

这就让人奇怪了。

项目中没有配置 这个5.x的驱动jar包,怎么没有报 ClassNotFound异常呢?

先简单把pom.xml mysql驱动改成5.x,经过测试,时间恢复正常。

再把版本改为8.x的,驱动使用对应的 com.mysql.cj.jdbc.Driver。

测试环境ok。

大喜。

(如果说,时区不带有问题,那为啥之前没有出现呢?之前根本没用过 oa数据库的 时间,这个问题 还没有暴露出来)

6、预发环境部署,又不行了。

测试环境ok,预发环境不ok,不太可能是代码问题,难道是 驱动 有问题,或者 测试和预发 2个环境的数据库不一样?

不可能,测试和 预发,oa数据库 就只有1个。

那,最可能的原因:“控制变量法”。2个环境的  数据库,有哪里配置不一致。

oa.jdbc.driver : com.mysql.cj.jdbc.Driver
oa.jdbc.url : jdbc:mysql://192.11111111:3306/v56?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8

预发环境,缺少 服务器 时区参数“serverTimezone=GMT%2B8”。

在最早用mysql 驱动5.x的时候,这个参数不是必须的。

7、结论

现在看来,8.x, jar包用8.x,驱动用 com.mysql.cj.jdbc.Driver,最后 时区 需要带上,我用的是:serverTimezone=GMT%2B8

发布了1318 篇原创文章 · 获赞 2522 · 访问量 340万+

猜你喜欢

转载自blog.csdn.net/FansUnion/article/details/103017927