spring boot 使用 Mybatis 存储 日期格式时相差 14 小时的问题

龚雄壮 的个人博客 好记性不如烂笔头! 本文由博客端 http://www.laog.net 主动推送
本贴最后更新于 491 天前,其中的信息可能已经时移世异

问题描述

今天在 Spring boot 项目中遇到在使用 mybatis-generator 自动生成的 Example 进行保存用户信息时,发现存储在数据库中的创建时间和实际时间相差 14 个小时;下面记录一下问题出现的原因和解决的方法。

出现问题原因

Spring boot MyBatis 日期转化的时区和数据库时区不一致导致。

1. 查询数据库时区


show variables like '%time_zone%';
# 查询显示结果:
# system_time_zone: CST
# time_zone:SYSTEM

CST 可为 4 个不同时区的缩写,可参考 CST

2. 猜想 Spring boot MyBatis 转化日期格式使用的时区

猜想:com.mysql.cj.jdbc.Driver 转化 SQL 的时候使用的时区是美国中部时间 UTC-06:00
猜想:MySQL 数据库使用的是默认当地时区也就是中国标准时间 UTC+08:00
这样相加就可以得出时间相差 14 个小时

3. 解决方法

set  global  time_zone = '+08:00';
set  time_zone = '+08:00';

设置成功后需要重启数据库

spring.datasource.url=jdbc:mysql://localhost:3306/test?useTimezone=true&serverTimezone=GMT%2B8

意思是链接数据库的时候就设置时区 UTC+8

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    783 引用 • 1368 回帖 • 692 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 Google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    149 引用 • 404 回帖 • 695 关注

赞助商 我要投放

回帖
请输入回帖内容 ...