日期与毫秒 | 为了可扩展性,在 Java + MySQL(或其他数据库)中保存、搜索和获取时间

Dax*_*xon 6 java database datetime jodatime

Java 和 DB for DateTime 哪个最有利?(使用 JodaTime 作为日期)

(DateTime 对象 (Java) + TIMESTAMP (DB) ) VS (毫秒长 (Java) + BIGINT(DB)

用于在底层数据库支持的 Java Web 应用程序中使用日期时间信息

兴趣范围

  • Java 中的操作、处理和内存使用
  • 节省使用 MySQL 数据库中的高效存储空间
  • 轻松将 BIGINT/TIMESTAMP 列移植到其他数据库
  • 轻松在数据库中搜索 BIGINT/TIMESTAMP 或在两个 BIGINT/TIMESTAMP 之间搜索

例如,假设我有一个带有开始和结束日期时间的事件。在数据库中使用 BIGINT 搜索日期事件是否比 TIMESTAMPS 更快

当可扩展性和检索问题出现时,我可能会交换底层数据库。

将日期时间保存为 MySQL 数据库中的时间戳会在移植到其他数据库(如 Oracle)时导致问题吗?


我目前在java中使用Joda DateTime,然后存储该值的毫秒数。

检索它时,我将毫秒转换回 DateTime 对象并显示它。

Bom*_*mbe 5

自 1970\xe2\x80\x9d 以来,我\xe2\x80\x99m 始终使用 \xe2\x80\x9cmilliseconds 方法。这样我\xe2\x80\x99就不必担心日期属于哪个时区,因为数据库中的日期始终是UTC。

\n

  • 我从未因使用它而受到赞扬,但我也始终使用 1970 纪元时间,并且我的 SQL 和逻辑在调度和预订系统中经历了许多 DST 时间。 (3认同)

Sea*_*wen 1

这里确实有两个问题。首先,在 Java 中应该使用什么抽象来表示时间?Joda Time 绝对比 java.util.Date 更好。如果您想知道是否简单地使用 long - 我想如果您需要进行任何日期操作或比较,您将无法摆脱这一点。那么,乔达时间。

然后,最好在 MySQL 中使用 TIMESTAMP,因为它在存储方面几乎相同,并且当您想在列上使用日期函数时,MySQL 会将该值适当地视为日期。JDBC 驱动程序也会理解它应该映射到日期类型。

我无法想象如果您需要的话,您在将日期类型(在架构中正确表示为日期)移植到另一个数据库时会遇到麻烦。如果您将日期类型视为 bigint,我可以想象会出现问题,这是不太正确的。

因此,只需在这里选择最正确的类型即可。无论如何,我怀疑选择不太合适的类型是否能带来任何性能提升。