【问题标题】:Spring JPA and MySQL stores incorrect LocalDateTime valueSpring JPA 和 MySQL 存储不正确的 LocalDateTime 值
【发布时间】:2021-07-09 14:59:12
【问题描述】:

我正在使用 Spring Data JPA 将日期时间值存储在 MySQL 表列中。但它的表现真的很奇怪。当我创建应该存储的实体时,我有用于创建日期和时间的 LocalDateTime 字段,该字段是通过 LocalDateTime.now() 设置的。当我调试代码并查看运行中的代码时,LocalDateTime 字段被实例化为正确的日期和时间。但是由于某种原因,当实体存储在 MySQL 数据库中时,时间被设置为过去的两个小时。如果时间是下午 4 点,它会在数据库表中设置为下午 2 点。但是,当我再次使用我的 jpa 存储库读取数据库中的值时,它再次被提前 2 小时推送,尽管它以 tho 小时偏移量存储。所以这有点像两个错误就是一个正确......我猜?怎么会这样?这看起来很疯狂,而且……不合逻辑。如果这很重要,那就是本地发展。

【问题讨论】:

  • 尝试检索那个“错误”的值(在春天)。如果检索到的值是实际的日期和时间,那么是您的数据库在进行时区转换。
  • 使用更新的 JDBC 驱动程序 (≥8.0.22) 应该可以解决问题。详情请见bugs.mysql.com/bug.php?id=93444

标签: mysql spring database jpa localdatetime


【解决方案1】:

由于 DB,我早些时候遇到了这个问题,所以最初,我尝试减少时间和分钟,但是,它不起作用。所以我重新加载了应用程序和数据库,然后它工作正常。 你可以试试它可能对你有用

【讨论】:

    【解决方案2】:

    我认为这个问题与数据库有关,与您的代码无关。

    我有一个不同的方法在我的系统中起作用

     Instant instant = Instant.now();
     Timestamp timestamp = Timestamp.from(instant);
    
    

    使用此时间戳设置日期和时间,您还必须更改实体类属性

    private Timestamp publishedAt;
    
    

    我希望它会起作用!

    【讨论】:

      【解决方案3】:

      试试这些注释

          @CreationTimestamp
          @Temporal(TemporalType.TIMESTAMP)
          @Column(name = "published_at")
          private Date publishedAt;
      

      【讨论】:

        猜你喜欢
        • 2017-07-20
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        • 2018-08-06
        • 2012-07-16
        • 2017-04-01
        • 2016-12-26
        • 2018-02-12
        相关资源
        最近更新 更多