0%

Java & Mysql & Docker 时区相关

最近在用 SpringBoot 开发这个博客, 这两天终于快把前台页面写完了, 在做评论模块的时候发现时间有时区的问题, 经过一系列反复调整和实验, 终于知道是怎么回事了. 专门在这记录一下方便以后查询.

运行环境

博客系统使用 MySQL 作为数据库, 后台使用 SpringBoot 作为框架, Kotlin 作为开发语言, 然后都是运行在宿主机为 CentOS 7Docker 环境之中.

知识要点

  • JavaMySQL 容器中的时区要一致:
    在使用官方的镜像作为容器环境时, 首先要保证容器的时区要一致.
  • 连接 Url 的时区也要和容器的时区保持一致:
    在编写配置时一定要协商数据库的时区参数:
    jdbc:mysql://localhost:3306/db?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useUnicode=true
    
    其中的 serverTimezone 一定要匹配上数据库运行环境对应的时区, 不然就会出现时间对不上的问题.

总结

默认情况下, 容器的时区都是 UTC, 但是由于在使用工具查看数据库时为了准确反应数据库存储的时间, 都会给 MySQL 设置本土时区, 也就是 Asia/Shanghai, 所以结合上面的结论, 也要同时将 Java 容器的时区和数据库连接地址的时区统一成 Asia/Shanghai.

  • 本文作者: 6x
  • 本文链接: https://6xyun.cn/article/107
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!