Java操作mysql插入记录带时间戳时差问题

Posted luffy5459

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java操作mysql插入记录带时间戳时差问题相关的知识,希望对你有一定的参考价值。

    如题所示,我们在做mybatis相关项目的时候,会用到mysql,如今更多的是直接使用springboot+mybatis组合。这样,在配置数据源的时候,会有这样的配置:

server:
  port: 8080
spring:
  application:
    name: mec_huali
  datasource:
    url: jdbc:mysql://192.168.226.100:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: root

    我们可以看到,数据源连接url参数后面跟着一个参数名serverTimezone=GMT-8。因为"-"要转义,所以是GMT%2B8。如果这个参数不带,或者参数名写错了:serverTimeZone。那么就会出现插入当前时间,变成了世界时间,并不是东八区时间或北京时间。

     我们可以看看mybatis打印语句,以及数据库中保存的记录:

插入第一条记录,这时候不带serverTimezone参数。    

数据库中的记录:

 

很明显,相差了8小时。

再插入一条记录,这时候正确带上serverTimezone参数。  

数据库中的两条记录也对比明显:

 

前后两条记录,仅仅间隔三分钟,时差却差了8个小时多。 在中国,我们最常用的时间显示是北京时间,虽然世界时间也是没有问题的,但是我们更希望它显示东八区时间。

从这里也可以看出,数据源连接信息中的url参数serverTimezone能够解决插入记录时时差问题。

以上是关于Java操作mysql插入记录带时间戳时差问题的主要内容,如果未能解决你的问题,请参考以下文章

创建PHP时间戳以插入mysql数据库[重复]

带游标的Mysql存储过程

将 UTC 时间戳插入 MySQL - 夏令时时区

如何减去两个 sql 时间戳字段,然后以小时为单位返回时差

将用户记录插入MYSQL表

为啥mysql中的timestamp类型的数据,没有插入也有数据