将java.util.Date存储到MySQL datetime时的舍入问题
MySQL数据库列:将java.util.Date存储到MySQL datetime时的舍入问题,mysql,hibernate,datetime,Mysql,Hibernate,Datetime,MySQL数据库列: PLANNING_DATE datetime Java字段: private java.util.Date planningDate; 休眠映射: <property name="planningDate" column="PLANNING_DATE" type="timestamp" not-null="true"/> 问题是: MySQL数据库中的planningDate并不总是匹配planningDate字段。有时,它的偏移量为1秒。这是一个取整
PLANNING_DATE datetime
Java字段:
private java.util.Date planningDate;
休眠映射:
<property name="planningDate" column="PLANNING_DATE" type="timestamp" not-null="true"/>
问题是:
MySQL数据库中的
planningDate
并不总是匹配planningDate
字段。有时,它的偏移量为1秒。这是一个取整的问题吗?我对MySql或Hibernate都不太了解,但现在
A) 您可能应该使用java.sql.Date。它是java.util.Date的一个精简子类,用于JDBC
B) 他们确实提到,他们的日期时间类型不存储秒的小数部分。因此,也许正在发生这种情况。但是文档中提到了截断。我对MySql或Hibernate都不太了解,但这里是 A) 您可能应该使用java.sql.Date。它是java.util.Date的一个精简子类,用于JDBC
B) 他们确实提到,他们的日期时间类型不存储秒的小数部分。因此,也许正在发生这种情况。但是文档提到了截断。好的,我认为这是因为在MySQL>=5.6.4中,他们将DATETIME更改为默认截断小数秒。我更新了表模式以使用新的日期时间(6)。我会检查这是否真的是原因
编辑:实际上,MySQL中的DATETIME>=5.6.4(相当于DATETIME(0))舍入到秒精度,而Oracle中的DATE则舍入到秒精度。添加了一个自定义的Hibernate类型来执行截断而不是取整,问题就解决了。好的,我认为这是因为在MySQL>=5.6.4中,默认情况下,他们将DATETIME更改为截断小数秒。我更新了表模式以使用新的日期时间(6)。我会检查这是否真的是原因
编辑:实际上,MySQL中的DATETIME>=5.6.4(相当于DATETIME(0))舍入到秒精度,而Oracle中的DATE则舍入到秒精度。添加了一个自定义Hibernate类型来执行截断而不是取整,问题就解决了。为什么不使用
java.sql.Date
?我还需要存储时间信息:小时、分钟、,秒。java.sql.Timestamp
有一个时间组件。为什么不使用java.sql.Date
?我还需要存储时间信息:小时、分钟、秒。java.sql.Timestamp
有一个时间组件。我也有同样的问题。你能分享一下定制代码吗?我也有同样的问题。你能分享一下定制代码吗。