查询数据库回显时间数值异常

一. 前言

小熙的项目是springcould的微服务,采用的是springboot 2.1.12。

二. 问题

查询数据库,返回到项目中的时间比数据库的时间多了13小时。

当时想到是时区问题

  1. 查询数据库是正常的。

  2. 项目当前模块的yml时区设置是正常的

    spring:
      jackson:
        time-zone: Asia/Shanghai #设置时区为Asia/Shanghai
        date-format: yyyy-MM-dd HH:mm:ss
    
  3. 经过小熙的查询是连接数据库的JDBC没有指定对应时区,所以出现问题(连接上回显数值异常)

三. 解决

在JDBC上加上对应的时区(两者都可以),防止回显数值异常。

serverTimezone=GMT%2B8                     时区=东八区
serverTimezone=Asia/Shanghai

例如:

spring:
  datasource:
    druid:
      # JDBC 配置(驱动类自动从url的mysql识别,数据源类型自动识别)
      url: jdbc:mysql://127.0.0.1:3306/chengxi-test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&tinyInt1isBit=false
      username: chengxi
      password: 123
      driver-class-name:  com.mysql.cj.jdbc.Driver
  1. 关于北京时区:Asia/beijing,当ssl连接为true值的时候会异常

     useSSL=false
    
  2. 小熙的springboot版本是2.1.12,从2.1.x以上的版本会默认引入mysql连接器8.0以上版本
    所以连接器用的是mysql-connector-java-8.0.x.jar
    而在MySQL连接器8.0以上版本中会存在时区问题
    新版的驱动类改成了com.mysql.cj.jdbc.Driver
    新版驱动连接url也有所改动 ,所以需要按对应场景指定对应时区。

四. 后语

经过此次,小熙才更加理解连接上也要加上对应时区。

你可能感兴趣的:(抛错解决,mysql)