gpt4 book ai didi

java - 使用 mysql-connector-java jdbc 驱动程序 8.0.18 为 MySQL 8 服务器获取时间戳列的错误值

转载 作者:行者123 更新时间:2023-12-01 14:27:53 25 4
gpt4 key购买 nike

我们已将应用程序从 MySQL 5.1.6 迁移到 MySQL 8.0.16

使用 mysql-connector-java jdbc 驱动程序(版本 8.0.18、8.0.19)从 MySQL 8 服务器检索时间戳列时,我们得到的日期值不正确,该值处于夏令时 (DST)。

我们的服务器托管 Java 应用程序和 MySQL 数据库都在 EST 中。

在这里,我们有一列 created_date有类型日期时间。对于特定行,它的值为 '2020-03-17 23:01:54'。通过 JDBC 检索相同的数据时:

Timestamp timestamp = resultSet.getTimestamp("created_date"); 

我们得到的值(value)为 2020-03-18 00:01:54.0
即正在应用 DST。

MySQL 中存在一个已知错误: https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-known-issues-limitations.html

建议在 jdbc url serverTimezone=UTC 中使用添加附加参数。但是我们不能使用 UTC,因为我们想在我们的应用程序/数据库中使用特定于部署的时区。

注意:我们在 MySQL 5.1 中没有遇到这个问题。

补充更新:
在将数据插入数据库时​​,如果我使用带有参数 serverTimezone=UTC 的 jdbc url,那么在检索时间戳列时我会得到正确的值。

因此,在 serverTimezone=UTC 的情况下,JDBC 驱动程序在将时间戳存储在数据库中时并未应用 DST。因此建议的解决方法(即 serverTimezone=UTC)似乎有效。

但是,如果我使用包含 serverTimezone=UTC 的 JDBC url 使用 Load Data Local file 命令插入数据,即
PreparedStatement stmt = connection.prepareStatement("LOAD DATA LOCAL INFILE.....")

似乎 serverTimezone=UTC 标志被忽略,并且数据正在使用 DST 应用的时间戳值存储。因此,在检索时间戳时,我们得到了不正确的值。

感谢任何建议。

最佳答案

我遇到了同样的问题,并通过安装新版本的 Connector/J 8 驱动程序(8.0.20)解决了这个问题:
https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-20.html

关于java - 使用 mysql-connector-java jdbc 驱动程序 8.0.18 为 MySQL 8 服务器获取时间戳列的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60302378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com