网站首页 > java教程 正文
前言
mysql8.x的jdbc升级了,有如下变化:
驱动包用的是新版 mysql-connector-java-8.x.x.jar
新版的驱动类改成了com.mysql.cj.jdbc.Driver(com.mysql.jdbc.Driver 是 mysql-connector-java 5中的、com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6以上的版本中的)
新版驱动连接url也有所改动,增加了时区(serverTimezone)、ssl连接(useSSL)属性都不允许为空。
案例(未查询数据库服务的时区的情况下):
配置jdbc的URL:jdbc:mysql://[IP]:[PORT]/[DB]?useSSL=false&serverTimezone=UTC
应用运行一段时间后,发现数据库中登记的时间和正常的时间不一致。
查询表字段值:
而现在电脑的时间是:
问题排查
1、服务器时间不同步
使用命令:date,查看linux服务器时间
[root@abc ~]# date
Sat Mar7 18:43:30 CST 2020
服务器的机器时间没有问题
2、程序问题
uLog.setLogTime(new Date());
程序是使用的机器时间,不会有问题
3、数据库时间
查看数据库时间:select sysdate()
mysql>select sysdate();+---------------------+
| sysdate() |
+---------------------+
| 2020-03-07 18:48:01 |
+---------------------+
1 row in set
时间也是没有问题,最后考虑到jdbc增加了时区属性
问题根源
UTC代表的是全球标准时间,是以原子时计时,更加精准,适应现代社会的精确计时。
GMT格林威治标准时间,是指位于伦敦郊区的皇家格林尼治天文台的标准时间。
但是我们使用的时间是北京时区也就是东八区,领先UTC和GMT八个小时。
一般视为无差别,即:北京时间=UTC+8=GMT+8。
例:已知东京(东九区)时间为5月1日12:00,求北京(东八区)的区时?北京时间=12:00-(9-8)=11:00(即北京时间为5月1日11:00)。
问题找到了,就是时区字段的问题
解决方法
修改jdbc时区,改成服务器所在地的真实时区
前者为修改之前的UTC
后者为修改之后的GMT
//北京时间东八区
serverTimezone=GMT%2B8
//或者使用上海时间
serverTimezone=Asia/Shanghai
重启应用,发现时间是正确的
+---------------------+
| log_time |
+---------------------+
| 2020-03-07 19:04:06 |
| 2020-03-07 19:04:03 |
| 2020-03-07 19:04:03 |
| 2020-03-07 19:04:03 |
| 2020-03-07 19:04:03 |
| 2020-03-07 19:04:03 |
| 2020-03-07 19:04:02 |
| 2020-03-07 19:04:02 |
| 2020-03-07 19:03:51 |
| 2020-03-07 10:40:35 |
| 2020-03-07 10:40:35 |
| 2020-03-07 10:40:35 |
猜你喜欢
- 2024-10-13 深度分析ClassLoader机制,不可错过这一篇
- 2024-10-13 RxJava2.X 源码解析(一):探索RxJava2分发订阅流程
- 2024-10-13 与其他语言相比,Java有多安全?(java语言有哪些缺点)
- 2024-10-13 JVM 配置参数 -D,-X,-XX 的区别
- 2024-10-13 浙江大学终于把java整理成漫画书了,动画教学更生动,允许白嫖
- 2024-10-13 java 核心技术-12版 卷Ⅰ- 4.1 面向对象程序设计概述
- 2024-10-13 SpringBoot2.x配置多数据源(springboot如何配置多数据源)
- 2024-10-13 JAVA 中获取比X大1位数中最小的数
- 2024-10-13 玩大了!Log4j 2.x 再爆雷(log4j最新版本)
- 2024-10-13 全面解读 Java 日志框架(一)(java主流日志框架)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)