CST 时区
名为 CST 的时区是一个很混乱的时区,有四种含义:

  • 美国中部时间 Central Standard Time (USA) UTC-05:00 / UTC-06:00
  • 澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
  • 中国标准时 China Standard Time UTC+08:00
  • 古巴标准时 Cuba Standard Time UTC-04:00

美国从“3月11日”至“11月7日”实行夏令时,美国中部时间改为 UTC-05:00,与 UTC+08:00 相差 13 小时。

背景:偶然一次,发现从数据库读出的时间打印出来比实际时间多了13小时。
检查数据库时区:

而数据库连接没有定义具体时区:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=true&allowMultiQueries=true

分析原因:

mybatis 在与 MySQL 协商会话时区时,mybatis 根据查询数据库时区,获取到 CST ,认为数据库时区是美国中部时间 UTC-05:00,而当前系统时区是 UTC+08:00,所以在拿到数据库的时间上面加了13个小时。导致最后时间比实际多。

解决办法:

1:修改数据库时区为 UTC+08:00,不用CST这种有歧义的定义。

mysql> set global time_zone = '+08:00'; Query OK, 0 rows affected (0.00 sec) 

mysql> set time_zone = '+08:00'; Query OK, 0 rows affected (0.00 sec)

或者修改 my.cnf 文件,在 [mysqld] 节下增加 default-time-zone = '+08:00'。

2:与数据库连接时,定义时区,避免mybatis框架从mysql获取时区。在连接上加上  serverTimezone=GMT%2B8

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=true&allowMultiQueries=true&serverTimezone=GMT%2B8

环境:

  MySQL5.7.12

  SpringBoot  2.0.1.RELEASE

  MyBatis  3.4.1

如有错误的地方,请指出。谢谢评论。

参考:

https://blog.csdn.net/crystalqy/article/details/90896673

https://juejin.im/post/5902e087da2f60005df05c3d

与 MySQL 因“CST” 时区协商误解导致时间差了13 小时的更多相关文章

  1. 【转贴】一次 JDBC 与 MySQL 因 “CST” 时区协商误解导致时间差了 14 或 13 小时的排错经历

    原文:https://juejin.im/post/5902e087da2f60005df05c3d ------------------------------------------------- ...

  2. CST时区,MYSQL与JAVA-WEB服务器时间相差13个小时的问题

    最近倒腾了一台阿里云主机,打算在上面装点自己的应用.使用docker安装了安装mysql后,发现数据库的存储的时间与java-web应用的时间差8个小时,初步怀疑是docker容器时区的问题.经过一系 ...

  3. ISO日期格式标准,浏览器到服务器到mysql中的时区

    时区简单理解 https://zh.wikipedia.org/wiki/%E6%97%B6%E5%8C%BA 上面的链接是时区的wiki说明,下面说说我记住的部分: GMT时区是格林威治标准时间,我 ...

  4. linux系统修改CST时区

    ================================================= [root@tzyyserveryg ~]# date -R Fri, 28 Nov 2014 08 ...

  5. 修改mysql的时间/时区

    # 背景 往db中insert数据发现时间不对,因为是新DB,所以猜测是mysql设置不对 # 解决方法 方法一:通过mysql命令行模式下动态修改 show variables like " ...

  6. mysql--时区问题(时间差8个小时?修改Mysql 时区)

    发现评论时间比本地时间晚8小时,原因:mysql默认时区选择了CST 解决办法: Ubuntu系统环境下: 1.检查mysql系统时区 进入mysql:mysql -u root -p mysql&g ...

  7. Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  8. php查询mysql返回大量数据结果集导致内存溢出的解决方法

    web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...

  9. Mysql -- 设置中国时区时间

       Mysql -- 设置中国时区时间 查看mysql的时区设置 mysql> show variables like '%time_zone%'; 修改mysql的时区设置, 注:mysql ...

随机推荐

  1. (转)移动端自定义返回上一页的方法:history

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求. 那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  2. WPF应用程序内嵌网页

    原文:WPF应用程序内嵌网页 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/shaynerain/article/details/78160984 WPF ...

  3. 关于idea maven工程创建struts2入门配置及案例

    1.在maven工程下添加需要导入的jar包节点 <dependencies> <dependency> <groupId>org.apache.struts< ...

  4. Fedora 30 安装 Gradle

    当前的 Gradle 最新版本是5.4.1.您可以从发布页面下载所有 Gradle 版本的二进制文件和查看文档. 先决条件 Gradle 能够在所有主流操作系统上运行,只要具备 Java-JDK/JR ...

  5. DataGrid自定义复选框

    <DataGridTemplateColumn Header="选择" Width="Auto" > <!--列头模板--> <D ...

  6. Expression Blend学习动画基础

    原文:Expression Blend学习动画基础 什么是动画(Animation)? 动画就是时间+换面的组合,画面跟着时间变化.最常见的是flash的动画,还有GIF动态图片. 动画的主要元素 时 ...

  7. XE Delphi 判断字符为中文的方法

    在uses中添加System.AnsiStrings /// Param ch--字符串/// Param cno--字符位置 function IsZHChar(const ch: AnsiStri ...

  8. C# Newtonsoft.Json JObject移除属性,在序列化时忽略

    原文 C# Newtonsoft.Json JObject移除属性,在序列化时忽略 一.针对 单个 对象移除属性,序列化时忽略处理 JObject实例的 Remove() 方法,可以在 指定序列化时移 ...

  9. Win8 Metro(C#)数字图像处理--2.68图像最小值滤波器

    原文:Win8 Metro(C#)数字图像处理--2.68图像最小值滤波器 /// <summary> /// Min value filter. /// </summary> ...

  10. C# 生成txt日志文件

    /// <summary> /// 创建日志文件,每天一个 /// </summary> /// <param name="logContent"&g ...