Derby/JavaDB:TIMESTAMP和BIGINT数据类型-哪种数据类型更适合存储日期?

Derby/JavaDB:TIMESTAMP和BIGINT数据类型-哪种数据类型更适合存储日期?,java,sql,derby,javadb,Java,Sql,Derby,Javadb,我有点困惑——我想将日期存储在JavaDB/Derby数据库中,但使用哪种数据类型更好 我可以像System.currentTimeMillis()那样简单地存储Long,并以BIGINT格式将其保存到数据库中。以后我可以根据需要格式化它 或者我可以使用TIMESTAMP数据类型将其存储为TIMESTAMP('1962-09-23 03:23:34.234') 哪种方法更有效?的文档和两者的文档都说Derby使用分辨率。这意味着一个64位整数,但我不知道Derby的实现。如果你真的在乎,看看源代

我有点困惑——我想将日期存储在JavaDB/Derby数据库中,但使用哪种数据类型更好

我可以像
System.currentTimeMillis()
那样简单地存储
Long
,并以
BIGINT
格式将其保存到数据库中。以后我可以根据需要格式化它

或者我可以使用
TIMESTAMP
数据类型将其存储为
TIMESTAMP('1962-09-23 03:23:34.234')

哪种方法更有效?

的文档和两者的文档都说Derby使用分辨率。这意味着一个64位整数,但我不知道Derby的实现。如果你真的在乎,看看源代码

为什么不使用时间戳?数据库的工作是管理数据,所以就让它来吧。如果没有非常重要的原因,您不应该试图偷工减料地操纵数据类型。对“效率”的模糊关注是对数据库服务器工作的微观管理

此外,你的问题很模糊。“效率”是什么意思?更少的存储空间?内存中使用的空间更少?索引的优势?更快的查询?写得更快?但是,在你确定了一个特定的瓶颈之前,这些担心都是(一件坏事)


将日期时间值存储在日期时间数据类型中有很多优点,否则该数据类型将不会添加到数据库的指令表中。按预期使用时间戳的一个重要好处是它知道如何将字符串解析为日期时间值。

在程序中,什么更容易?ie,这将减少您将其格式化为程序可用字符串的工作量?我不会担心数据库方面的问题,现代数据库非常智能,而且大部分都会自行处理。当然,除非你已经测量到这是你程序中的一个瓶颈。顺便说一句,您可能想检查H2数据库,它非常快,可移植,并且是用纯java编写的。我觉得它比Derby好得多。选择一个真正的
timestamp
列,这是确保只存储有效日期的最好方法。您无法使用
bigint
列确保。顺便说一句:我更喜欢HSQLDB而不是Derby或H2,因为应用程序不需要大量的SQL操作,所以我选择JavaDB作为商业项目的免费版本。在这种情况下,我更喜欢
BIGINT
,因为我只需要检查/计算时差。谢谢。最大的问题是。您打算如何使用存储的值?根据您的业务需要,它可以从简单的数字类型一直到UTC时间+时区名称(如CHAR/VARCHAR colm)+实际偏移量。