Unix timestamp VS datetime
Possible Duplicate:
datetime vs timestamp?
我有一个mysql表,它有一个列add_date。它跟踪记录添加到数据库的日期/时间。
基于此表的查询:
以以下格式添加记录时显示:2小时前、4周前、1年前等
允许用户搜索任何日期/月/年中插入的记录。因此,用户可以选择只查看2009年插入的记录。
在这种情况下,哪一个更好——unix时间戳还是datetime?
现在我正在同时使用这两种方法,但是由于表将随着时间的推移拥有数百万条记录,同时拥有这两列可能会影响数据库的大小。
Unix时间戳似乎更适合在PHP中转换为2 hours以前的格式,而且它与时区无关。但是datetime具有更好的可读性,并且对特定日期/时间/年进行查询似乎更容易。
你的建议?
当你有选择的时候,我会说去mysql约会。
您不必处理日期范围问题
您可以使用MySQL的日期函数(BETWEEN(), DATE_ADD等)轻松查询时间跨度。
与日期相关的查询将更快,尤其是当您有数百万条记录时,因为您不必使用from_unixtime(),这在大型查询中可能很昂贵。
必要时将日期字段转换为Unix时间戳是孩子们的游戏。
- 这个。如果您想在PHP端使用timestamp,只需使用unix _timestamp(您的_列)。但在数据库中,使用本机日期类型存储日期。此外,数据库中的数据可能被其他应用程序使用,这些应用程序可能更喜欢SQL日期格式而不是时间戳。
- 将日期转换为与时区相关的Unix时间戳是否有问题?
- @丢失了代码好问题。涉及的因素有很多,mysql服务器的时区设置,以及系统的时区设置,默认情况下PHP将使用这些设置。通常,mysql日期时间字段不区分时区。只要将UTC日期存储在那里,就应该能够轻松地将其转换为时间戳,但如果MySQL和/或PHP的时区与UTC不同,则要小心。相关:stackoverflow.com/questions/18449/…
通过使用unix时间戳和mysql from_unixtime()函数在需要时将结果转换为datetime格式,您可以获得两个方面的最佳效果。
- 您还可以通过使用datetime和在必要时使用日期函数转换为unix时间戳来获得这两个方面的最佳效果。考虑到使用datetime数据类型使许多查询变得更容易,我想说最好这样做。
- El Yobo说的。潜在的性能损失会使我在大表中避开from_unixtime()(尽管没有任何基准)。
- 当然,from_unixtime()不应该用于预期会产生大量数据的查询,而应该只用于返回要显示的结果集的查询。此外,datetime类型还可以用于使用unix_timestamp("2010-06-01 13:00")使查询更具可读性。每个查询只进行一次转换,因此不会造成性能损失。
我会选择MySQL格式,只是因为MySQL有大量的datetime函数,要使用它,时间戳将花费您另一次转换。
but since the table will have millions
of records over time, having both
columns may affect the size of the
database.
哦,我的。您真的关心4兆字节的额外空间吗?
- 我真的不知道这需要多少空间(我是大型数据库的新手)。如果你说只需要几个MBS,那么我认为两者都没有问题。
- 如果你不知道号码,就不应该提。任何程序员都不应该猜测。天气预报员的工作。dev.mysql.com/doc/refman/5.0/en/storage-requirements.html将告诉您,时间戳-4的datetime需要8个字节和int。所以,4*1000000=小于4MB
- 您可能还需要对这两个字段使用索引。这在空间上并不太昂贵,但是如果你使用多个字段索引,它可能会影响你的性能。