2013-06-27 46 views
0

快速的问题,我无法找到一个很好的答案。当我开始使用PHP和MySQL时,我学会了将日期/时间存储为Unix时间戳。 mySQL数据类型是BIGINT,PHP的日期函数在处理这个问题方面做了很多工作。当我查看文档时,Timestamp数据类型似乎变得更加突出。存储日期过期的BIGINT方式是什么?是否有一个普遍的思想观点,现在更好地使用这些方法中的哪一种?在mySQL中存储日期的数据类型

我知道时间戳数据类型有'当前时间戳'的默认值或更新是很好的。

想法?

在此先感谢

+0

还有DATE和DATETIME数据类型,我通常使用其中之一。 – Barmar

回答

1

主要论点我想给的是,这个数据类型是专为工作。

timestamp的一个优点是软件知道这个数字确实是一个日期并且会显示一个人类可读的日期。当您将日期存储为int s时,这总是一个问题。

有一点要记住,虽然是timestamp不适用于1970年1月1日之前的日期,但这与int方法没有什么不同。

+0

感谢您的输入。技术上INT在1970年以前的工作,如果你允许签名ints,但我很少这样做。这引发了另一个问题,但。我使用BIGINT,因此2038的上限不会影响我。 /时间戳将如何处理? –

+0

从dev.mysql.com开始> _TIMESTAMP的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC._ - 我会假设当需要出现他们会找到一种方法来增加上限。如果你担心另一个千年虫,你可以在25年内担心它。 – Halcyon

1

Andrew,你不应该使用任何种类的INT数据类型来保存日期。 MySQL提供了很多选项,如TIMESTAMP(如你所提到的),DATETIME,DATE,TIME,YEAR。你也可以使用本地MySQL时间函数。所以,没有理由真正使用任何其他数据类型。

[编辑]

MYSQL documentation是关于它的数据类型相当明确:

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in ‘YYYY-MM-DD HH:MM:SS’ format. The supported range is ’1000-01-01 00:00:00′ to ’9999-12-31 23:59:59′. 

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of ’1970-01-01 00:00:01′ UTC to ’2038-01-19 03:14:07′ UTC. 
+0

就像我说的那样,时间戳类型对我来说是新的。它与PHP工作得很好吗?它只是将其视为一个字符串,或者我可以使用date()函数来格式化它?这些如何处理2038上限呢? –

+0

安德鲁,我已经编辑了你的问题的答案。 ;-) – medina

相关问题