2012-12-12 43 views
3

我与各种ORM和数据库抽象一起工作,旨在使它能够轻松处理多个数据库,无论是关系数据库还是非数据库。更全面的解决方案通常会让您访问某些日期函数,这些日期函数可归结为实际的SQL(或者在非SQL数据库的情况下)。另一方面,这些抽象中的许多抽象并不提供对SQL函数的直接访问,并且你失去了直接处理日期的能力。相反,您需要使用上层语言(PHP,Python,或其他)来进行日期争夺,最后只需插入,选择具有格式的日期。所以我的问题是这样的:如果SQL服务器永远不会对日期本身做任何事情,我最好使用一个int并将纪元时间戳放入其中,还是有额外的值给数据库服务器“知道“这是约会?没有日期函数的SQL日期有什么用?

+2

当您使用不使用您的ORM包装的工具访问数据库时可能很有用。使用第三方数据库管理时,直接访问数据库的报告生成或数据挖掘工具可以在数据库中有实际日期时更加便于用户使用。 – Philipp

回答

3

如果您使用日期,请将它们存储为日期。

这不仅使它更易于在数据库和应用程序之间进行转换,而且当您需要根据日期进行任何操作(并且您将会,否则为什么有日期存储?)。

也就是说,当您需要使用日期进行排序或查询时,您不需要特别努力重新转换为日期。

+0

不是说我一定不同意你说的话,但排序的例子对我来说没有意义。如果我使用纪元timestamp * int *,它会按日期排序吗? – kojiro

+0

@kojiro - 不,但是当您需要选择一个范围时,在指定的月份中说出所有内容,您需要开始计算... – Oded

+0

以确保。但这个问题可以解释,*如果我需要手动进行计算... * – kojiro

1

除了什么@Oded said,如果你从来没有使用任何日期相关的功能,仍然有一些问题;

  • 此刻,你cannot store epoch timestamp in milliseconds into an INT字段(溢出)。

  • 时间戳没有毫秒将在Tue Jan 19 2038 @ 03:14:08 GMT+0000 (GMT)溢出INT因为它会比2147483647更大。

  • 但是,整数需要4个字节,日期时间需要8个字节。 You are better off 4 bytes if you are within above two limitations.

+0

我想总是有'BIGINT'。这给我买了时间。 :) – kojiro

+0

@kojiro,这是我能想到的唯一的东西:) – Kaf