4

Java 和 DateTime 数据库中哪个最有用?(使用 JodaTime 作为日期)

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

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

兴趣范围

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

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

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

将 DateTime 保存为 MySQL DB 中的 TIMESTAMP 会导致在移植到 Oracle 等另一个数据库时出现问题吗?


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

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

4

3 回答 3

4

我一直使用“自 1970 年以来的毫秒数”方法。这样我就不必担心日期属于哪个时区,因为数据库中的日期始终是 UTC。

于 2009-09-24T18:17:19.693 回答
1

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

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

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

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

于 2009-09-25T03:41:58.953 回答
0

当然,这取决于您想对数据做什么,但我建议使用数据库的本机类型作为时间/日期(无论可能是什么)来存储在数据库中。这是数据库的标准,数据库中的大多数日期/时间函数都需要这种形式的数据。

关于 MySQL 的特别说明:

虽然您可以将 TIMESTAMP 用于日期/时间值,但请注意 TIMESTAMP 不能记录早于 1970-01-01 的日期。因此,虽然可以使用接近“现在”的日期(例如创建/修改日期),但不适用于可能的历史日期,例如出生日期。因此,如果您完全确定永远不需要历史日期,请仅使用 TIMESTAMP。

于 2009-09-24T16:23:51.580 回答