• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

mysql时间保存差13个小时

java 来源:合格的程序员 4次浏览
问题:mysql时间保存到数据库中与当前时间相差13个小时,查询出来又显示正常
环境:
  • spring-boot
  • mysql驱动:com.mysql.cj.jdbc.Driver
  • mysql版本:5.7
分析
  1. 集成mysql-plus,怀疑是自动填充出问题,设置new Date()没问题,sql语句没问题
  2. 数据库时区: show variables like "%time_zone%";
  3. 查询出来显示正常
解决

com.mysql.jdbc.Drivercom.mysql.cj.jdbc.Driver的区别就是:com.mysql.cj.jdbc.Driver驱动需要指定时区:serverTimezone

# 在数据库连接池中指定时区
url: jdbc:mysql://172.17.60.159:3306/youbetter?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
思考
  • 时区检查:CTS,但是CTS有四种定义
美国中部时间 Central Standard Time (USA) 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 小时
  • JDBC时区协调
    mysql驱动向数据插入数据时,需要将应用的时间修改为数据库所在时区的时间,查询时再将数据库存储的时间转换为web服务器所在时区的时间
    代码:com.mysql.cj.jdbc.ConnectionImpl和com.mysql.cj.protocol.a.NativeProtocol
    参考:> https://www.cnblogs.com/zhi-leaf/p/10608134.html

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)