当前位置: 首页 > 知识库问答 >
问题:

使用mysql-connector-Java jdbc驱动程序8.0.18在MySQL8服务器上获取不正确的时间戳列值

吴胜
2023-03-14

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

当使用Mysql-Connector-Java jdbc驱动程序(版本8.0.18、8.0.19)从MySQL8服务器检索时间戳列时,我们得到了夏令时(DST)中的日期值不正确的值。

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

在这里,我们有一个列created_date的类型是datetime。它具有特定行的值“2020-03-17 23:01:54”。同时通过JDBC检索与以下数据相同的数据:

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

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

MySQL中有一个已知的bug:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usageNotes-knowned-issures-limitations.html

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

注意:我们在使用MySQL5.1时没有遇到这个问题。

附加更新:在将数据插入数据库时,如果我使用带有参数servertimezone=utc的jdbc url,那么在检索timestamp列时,我会得到正确的值。

因此,对于servertimezone=utc,JDBC驱动程序在数据库中存储时间戳时似乎没有应用DST。因此建议的变通方法(即servertimezone=utc)似乎起作用了。

但是如果我使用Load data Local file命令插入数据,使用包含servertimezone=utc的JDBC url(即。

PreparedStatement stmt = connection.prepareStatement("LOAD DATA LOCAL INFILE.....")

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

感谢任何建议。

共有1个答案

金承嗣
2023-03-14

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

 类似资料:
  • 问题内容: 不久前,有人建议我更改代码以使用PDO,以便对查询进行参数化并安全地将HTML保存在数据库中。 好吧,这是主要问题: 我看了http://php.net/manual/en/ref.pdo-mysql.php,但我并没有真正知道应该把那个字符串放在哪里… 我正在构建的网站实际上只需要一页PDO。虽然我可能会考虑重新编写它,但要花一些时间,而且我需要页面尽快运行,因此无法完全关闭MySQ

  • 我们将MySQL connector J从5.1.46版本升级到8.0.16。我们的web服务器时区是UTC,现在mysql服务器在IST时区,在升级驱动程序之前,驱动程序的时间戳列值只在UTC中持久化(使用hibenate),但是在移动到J8驱动程序之后,它被保存到mysql服务器时区,即IST。 我们只希望以UTC形式存储/提取时间戳值。

  • 问题内容: 背景 我正在尝试将条纹付款集成到我的网站中。我需要使用我的专用条纹密钥创建一个条纹用户。我将此密钥存储在服务器上,并调用服务器方法来创建用户。也许还有另一种方法可以做到这一点? 我的尝试和结果 我一直在使用相同的客户端代码和不同的服务器代码。所有尝试都会立即在客户端的console.log(…)上给出undefined,但在服务器的console.log(…)上给出正确的响应: 我也尝

  • 无法启动边缘驱动程序,我得到下面提到的错误和代码,我使用的是下面。请帮忙

  • 问题内容: 我知道您可以在Web,iOS和android中获取服务器时间戳-但是Firebase的新Cloud Functions呢?我不知道如何获得服务器时间戳?用例是我想在电子邮件到达时为其打上时间戳。 在网络上是Firebase.database.ServerValue.TIMESTAMP 但这似乎在功能节点服务器界面中不可用? 我认为已经很晚了,我可能会遗漏这里的重点… 编辑 我正在这样初

  • 我得到了这个错误,我不知道为什么我在workbench上尝试了这个语句,它起作用了。我也在寻找改进我的日期减法代码,基本上,我从表中得到deadline并从今天的日期中减去。