专业的JAVA编程教程与资源

网站首页 > java教程 正文

mysql-connector-java与MySQL 8.X版本建立连接

temp10 2024-10-13 09:27:57 java教程 11 ℃ 0 评论

前言

mysql8.x的jdbc升级了,有如下变化

mysql-connector-java与MySQL 8.X版本建立连接

驱动包用的是新版 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 |

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表