2010-06-01 197 views
17

可能重复:
datetime vs timestamp?Unix时间戳VS日期时间

我有一个MySQL表,其中有一列add_date。它跟踪记录添加到数据库的日期/时间。 1小时前,3个月前,1年前等

  • 允许用户搜索插入任何一天的记录:当在格式中加入记录

    1. 显示:基于该表

      查询/月/年。因此,用户可能被允许选择仅查看2009年插入的记录。

    这将是在这种情况下更好 - UNIX时间戳或日期时间?

    现在我正在使用这两种方法,但由于表格随着时间的推移会有数百万条记录,因此这两列可能会影响数据库的大小。

    Unix时间戳似乎是在PHP转换更好地2 hours前格式,也实在是时区独立。但日期时间具有更好的可读性,并且查询特定的日期/时间/年似乎更容易。

    您的建议?

  • 回答

    14

    当你有选择时,我会说为mySQL日期去。

    • 你不会有跨度使用MySQL的日期函数(BETWEEN(), DATE_ADD等)

    • 日期相关的查询会快很多采取的date range issue小号

    • 您可以轻松地查询时间照顾特别是当你有数百万条记录时,因为你不必使用FROM_UNIXTIME(),这在大型查询中可能很贵

    • 这是chi ld的作用是在必要时将DATE字段转换为UNIX时间戳。

    +2

    这个。只要使用UNIX_TIMESTAMP(your_column),如果你想在PHP端使用时间戳。 但在数据库中,使用本机日期类型来存储日期。此外,数据库中的数据可能被其他可能偏好SQL日期格式的应用程序使用,而不是时间戳。 – Arkh 2010-06-01 09:39:30

    +0

    关于时区,将日期转换为unix时间戳会有什么问题吗? – Yeti 2010-06-01 09:39:59

    +1

    @Lost_in_code实际上是个好问题。涉及多种因素,mySQL服务器的时区设置以及PHP默认使用的系统时区设置。通常,mySQL DATETIME字段是时区不敏感的。只要您在那里存储UTC日期,您应该可以轻松地将它们转换为时间戳,但是如果mySQL和/或PHP的时区与UTC不同,请小心。相关:http://stackoverflow.com/questions/18449/dealing-with-php-server-and-mysql-server-in-different-time-zones – 2010-06-01 11:08:20

    4

    我会去的MySQL格式,只是因为MySQL有很多日期时间功能,使用时间戳会花费你另一次转换。

    但由于该表将拥有数百万条记录 随着时间的推移,兼具 列可能会影响 数据库的大小。

    哦,我的。
    你真的关心4个额外的兆字节空间吗?

    +0

    我真的不知道需要多少空间(我是大型数据库的新手)。如果你说这只是几个MB,那么我不会看到两者都有问题。 – Yeti 2010-06-01 09:29:09

    +0

    如果你不知道数字,你不应该提及它。程序员不应该猜测。这是天气预报员的工作。 http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html会告诉你,日期时间需要8个字节和int时间戳 - 4.所以,4 * 1000000 =小于4Mb – 2010-06-01 09:32:58

    +1

    你'你可能也想在这两个字段上使用索引。这不是太昂贵的空间,但如果你使用多个字段索引,它可能会影响你的表现。 – Kaivosukeltaja 2010-06-01 09:33:12

    3

    您可以通过使用Unix时间戳和MySQL from_unixtime()功能在需要将结果转换为datetime格式获得两全其美。

    +1

    您还可以通过使用datetime并在必要时使用日期函数转换为unix时间戳来获得两全其美的效果。考虑到使用日期时间数据类型使得许多查询更容易,我会说最好这样做。 – 2010-06-01 09:50:57

    +0

    El Yobo说什么。潜在的性能损失是什么让我害怕大表中的'from_unixtime()'(尽管没有任何基准测试)。 – 2010-06-01 09:53:38

    +0

    当然,from_unixtime()不应该用于预期会导致大量数据,只有那些返回要显示的结果集的数据。此外,使用unix_timestamp('2010-06-01 13:00'),仍然可以使用日期时间类型使查询更具可读性。每次查询只进行一次转换,因此不会出现性能损失。 – Kaivosukeltaja 2010-06-01 09:59:18