-2

在数据库中保存日期时,我一直认为最好用time()函数的数字保存日期,因为它更准确,但我也看到人们保存日期,例如2013-02-01

推荐哪一个?或者是否有不同的场合你应该使用其中一个还是另一个?

4

3 回答 3

0

我宁愿保存日期,DATE而不是INT因为:

  • 更具可读性
  • 它仍然是日期!

无论如何它仍然是你的选择,考虑一下,

SELECT UNIX_TIMESTAMP(CURDATE()), CURDATE()

将导致

UNIX_TIMESTAMP(CURDATE())   CURDATE()
1359676800                  2013-02-01 00:00:00
于 2013-02-01T13:57:24.473 回答
0

始终保存为日期的文本表示形式,即YYYY-MM-DD. 更容易被人类阅读,并且不限于 Unix 时间戳整数的限制(您只能使用整数向前走这么远或向后走这么远)。

于 2013-02-01T14:00:17.357 回答
0

在 ISO 8601 上进行标准化会比较保守,而且比在 time_t UNIX 纪元之间进行转换要容易得多。

第二天的开始可能会受到小时偏移的影响,因此时区可能存在问题。在夏令时期间,一天的开始可能会受到影响。使用 time_t可能会消除这些问题的歧义,但也可能会遇到问题,因为您没有正确翻译 time_t 以获得预期效果。

由于 UNIX 时间纪元具有时间组件,因此如果您发送 time_t 值并让数据库将其转换为日期,则可能会出现问题。数据库可以以您意想不到的方式翻译它。但是,如果您发送日期,数据库会按照您的要求存储该日期(无论它认为该日期所在的时区如何)并返回该确切日期。

现在,根据您如何获取包含在 SQL 中的日期值,可能会发生这样的转换问题。但是,这将是您的代码中的一个问题,您可能希望数据库没有翻译或更改您发送它的值。

我会坚持输入它作为日期,因为它是可读的,它是一个日期,即使问题发生在不同的情况下,它也不会比 time_t 有更多的问题。

于 2013-02-01T14:02:32.210 回答