在数据库中保存日期时,我一直认为最好用 time()函数保存日期,因为它更准确但我也看到人们保存日期之类的 2013-02-01 。
推荐哪一个?或者您是否应该使用其中一种?
答案 0 :(得分:0)
我宁愿将日期保存为DATE
而不是INT
,因为:
无论如何它仍然是你的选择,考虑一下,
SELECT UNIX_TIMESTAMP(CURDATE()), CURDATE()
将导致
UNIX_TIMESTAMP(CURDATE()) CURDATE()
1359676800 2013-02-01 00:00:00
答案 1 :(得分:0)
始终保存为日期的文字表示,即YYYY-MM-DD
。人类更容易阅读,而不仅限于Unix时间戳整数的限制(你只能向前走这么远,或者到目前为止只能用整数)。
答案 2 :(得分:0)
标准化ISO 8601是比较保守的,比转换到time_t UNIX纪元要容易得多。
第二天的开始可能会受到小时偏移的影响,因此可能会出现时区问题。在夏令时期间,可能会影响当天的开始。使用time_t 可能会消除这些问题的歧义,但它也可能会出现问题,因为您没有正确翻译time_t以达到预期的效果。
由于UNIX时间纪元有一个时间组件,如果您发送time_t值并让数据库将其转换为日期,则可能会出现问题。数据库可以用你没想到的方式翻译它。但是,如果您发送日期,数据库将带您到您的单词,存储该日期(无论它认为该日期在哪个时区)并返回该确切日期。
现在,根据您获取SQL中包含的日期值的方式,可能会出现这样的翻译问题。但是,这在您的代码中会出现问题,您可能希望数据库没有翻译或更改您发送的值。
我坚持把它作为日期输入,因为它是可读的,它是一个约会,它不会比time_t更多的问题,即使问题在不同的情况下发生。