java - 在 MySQL 数据库中存储微秒

标签 java mysql datetime playframework playframework-2.0

我有一个带有 ebeans 的 Play Framework 应用程序。为了在主系统和离线系统之间进行同步,我使用 addDate 字段来标识唯一记录。

这在开发和初始测试(使用 jdbc:h2:mem:play;MODE=MYSQL 开发)以及使用有限数据集进行测试时非常有效。

但在生产中,对于并发用户,我发现 MySQL 数据库中不存储毫秒。我将字段创建为 datetime(6),但查询如下:

SELECT UNIX_TIMESTAMP(add_date) FROM `user` WHERE 1 

返回:

1499722493.000000
1499772800.000000
1499777225.000000
1499790922.000000
1499875868.000000
1499954855.000000
1499977124.000000
1499981148.000000
1499986822.000000

(ps.只要在MySQL中选择add_date字段返回2015-12-17 16:15:50.000000,说明精度就在那里)

因此不存储毫秒。在 Java 中,我使用普通的 Date 类,因此它们就在那里(因此在 H2 men 测试数据库中)。

protected Date addDate;

如何使用当前配置将毫秒存储在数据库中,而无需重写太多代码?

[编辑:]

I am using MySQL on Debian: Ver 14.14 Distrib 5.6.35
sbt.version=0.13.11
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.16")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.2")
mysql-connector-java % 5.1.43

最佳答案

java.time

麻烦的java.util.Date类现在被java.time取代。类。

Instant类代表UTC中时间线上的一个时刻。分辨率为nanoseconds (最多九 (9) 位小数)。

捕获当前时刻仅限于 milliseconds在 Java 8 中,但在 Java 9 及更高版本中扩展到纳秒 new implementationClock 。为了清楚起见,我将重复一遍:Java 8 和 Java 9 都可以存储纳秒级的值,但只有 Java 9 及更高版本可以捕获比毫秒分辨率。

Instant instant = Instant.now() ;  // Captures milliseconds in Java 8 but nanoseconds in Java 9+.

使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序,直接使用 java.time 类型,而不是破解 java.sql 类型。调用 PreparedStatement::setObjectResultSet::getObject 方法。

myPreparedStatement.setObject( … , instant ) ;

…还有…

Instant instant = myResultSet.getObject( … , Instant.class ) ; // Transfers a value with nanoseconds if present.
<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和more .

关于java - 在 MySQL 数据库中存储微秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45648866/

相关文章:

java - Apache Karaf 蓝图服务 <reference> 未注入(inject)对象

java - Spring Boot,Spring Data JPA,CrudRepository,基于文件的只读数据库,打包在JAR中

mysql - 当网站繁忙时如何阻止 apache2 崩溃?

c# - VB.Net VBDateTimePicker (可空日期时间选择器)

java - 为什么compareTo BigInteger while 循环不退出?

java - 如何创建嵌套在静态类中的类的实例,该类又嵌套在非静态类中?

mysql - 如何检索 View 创建时间?

php - 如何在MySQL中表示由产品组成的产品?嵌套集还是其他什么?

反向日期时间排序 [R]

.net - .net 中 en-CA 的短日期格式