【问题标题】:Rounding issues storing java.util.Date into MySQL datetime将 java.util.Date 存储到 MySQL 日期时间中的舍入问题
【发布时间】:2013-12-31 17:52:53
【问题描述】:

MySQL 数据库列:

PLANNING_DATE datetime

Java 字段:

private java.util.Date planningDate;

休眠映射:

<property name="planningDate" column="PLANNING_DATE" type="timestamp" not-null="true"/>

问题: MySQL DB 中的PLANNING_DATE 并不总是匹配planningDate 字段。有时,它会偏移 1 秒。这是一个四舍五入的问题吗?

【问题讨论】:

  • 你为什么不用java.sql.Date
  • 我还需要存储时间信息:小时、分钟、秒。
  • java.sql.Timestamp 有一个时间组件。

标签: mysql hibernate datetime


【解决方案1】:

好的,我认为这是因为在 MySQL >= 5.6.4 中,他们将 DATETIME 更改为默认截断小数秒。我更新了我们的表模式以使用新的 DATETIME(6)。我会检查是否确实是这个原因。

http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html

编辑:实际上,MySQL 中的 DATETIME >= 5.6.4(相当于 DATETIME(0))舍入到秒精度,而 Oracle 中的 DATE 截断。添加了一个自定义的 Hibernate 类型来进行截断而不是舍入,问题就解决了。

【讨论】:

  • 我遇到了同样的问题。能否请您分享自定义代码。
【解决方案2】:

我对 MySql 或 Hibernate 都不太了解,但这里是……

A) 您可能应该使用 java.sql.Date。它是 java.util.Date 的一个瘦子类,意味着与 JDBC 一起使用。

B) MySql doc 确实提到他们的日期时间类型不存储秒的小数部分。所以也许正在发生舍入。但是文档提到了截断。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2013-10-17
    • 2012-03-29
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    相关资源
    最近更新 更多