问题:mysql时间保存到数据库中与当前时间相差13个小时,查询出来又显示正常
环境:
- spring-boot
- mysql驱动:com.mysql.cj.jdbc.Driver
- mysql版本:5.7
分析
- 集成mysql-plus,怀疑是自动填充出问题,设置new Date()没问题,sql语句没问题
- 数据库时区:
show variables like "%time_zone%";
- 查询出来显示正常
解决
com.mysql.jdbc.Driver
和 com.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