Php Unix时间戳与日期时间

Php Unix时间戳与日期时间,php,mysql,sql,datetime,unix-timestamp,Php,Mysql,Sql,Datetime,Unix Timestamp,可能重复: 我有一个Mysql表,它有一列add\u date。它跟踪记录添加到数据库的日期/时间 基于此表的查询: 按以下格式添加记录时显示:2小时前、4周前、1年前等 允许用户搜索在任何日期/月/年插入的记录。因此,用户可以选择只查看2009年插入的记录 在这种情况下,unix时间戳和日期时间哪个更好 现在我同时使用这两个列,但由于表将随着时间的推移拥有数百万条记录,因此拥有这两个列可能会影响数据库的大小 Unix时间戳似乎更适合在PHP中转换为2小时ago格式,而且它与时区无关。但是da

可能重复:

我有一个Mysql表,它有一列
add\u date
。它跟踪记录添加到数据库的日期/时间

基于此表的查询:

  • 按以下格式添加记录时显示:2小时前、4周前、1年前等
  • 允许用户搜索在任何日期/月/年插入的记录。因此,用户可以选择只查看2009年插入的记录
  • 在这种情况下,unix时间戳和日期时间哪个更好

    现在我同时使用这两个列,但由于表将随着时间的推移拥有数百万条记录,因此拥有这两个列可能会影响数据库的大小

    Unix时间戳似乎更适合在PHP中转换为
    2小时
    ago格式,而且它与时区无关。但是datetime具有更好的可读性,查询特定的日期/时间/年份似乎更容易


    你的建议是什么?

    我会选择mysql格式,因为mysql有大量的datetime函数,如果使用带有时间戳的datetime函数,将需要进行另一次转换

    但是既然桌子上有几百万 随着时间的推移,记录的 列可能会影响文件的大小 数据库

    哦,天哪。

    你真的关心额外的4兆字节的空间吗

    通过使用unix时间戳和来自_unixtime()函数的MySQL
    将结果转换为所需的日期时间格式,您可以在这两个方面获得最佳效果。

    如果您有选择,我会说选择MySQL日期

    • 你不必照顾这些孩子

    • 您可以使用mySQL的日期函数(
      BETWEEN()、date\u ADD
      等)轻松查询时间跨度

    • 与日期相关的查询会快得多,特别是当您有数百万条记录时,因为您不必使用来自_UNIXTIME()
    ,这在大型查询中可能会很昂贵

  • 必要时,将日期字段转换为UNIX时间戳是儿戏


  • 我真的不知道这会占用多少空间(我是大型数据库的新手)。如果你说只有几兆,那么我认为两者都有问题。如果你不知道数字,你不应该提及。任何程序员都不应该猜测。这是天气预报员的工作。将告诉您datetime需要8个字节,时间戳-4需要int。因此,4*1000000=小于4mby您可能还希望在这两个字段上使用索引。这在空间上并不太昂贵,但如果使用多个字段索引,可能会影响性能。如果您想在php端使用时间戳,只需使用UNIX_TIMESTAMP(您的_列)。但在数据库中,使用本机日期类型存储日期。此外,数据库中的数据可能会被其他应用程序使用,这些应用程序可能更喜欢SQL日期格式而不是时间戳。将日期转换为有关时区的unix时间戳会有任何问题吗?@Lost_in_code实际上是个好问题。这涉及到很多因素,mySQL服务器的时区设置,以及PHP默认使用的系统时区设置。通常,mySQL日期时间字段不区分时区。只要您将UTC日期存储在那里,就应该能够轻松地将它们转换为时间戳,但如果mySQL和/或PHP的时区与UTC不同,请小心。相关:您还可以通过使用datetime和使用date函数在必要时转换为unix时间戳来充分利用这两个方面。考虑到使用datetime数据类型使许多查询变得更容易,我认为这样做更好。潜在的性能损失会让我在大表中避开
    from_unixtime()
    (虽然没有任何基准)。当然,from_unixtime()不应该用于预期会产生大量数据的查询,而应该只用于返回要显示的结果集的查询。此外,datetime类型仍然可以用于使用unix_时间戳('2010-06-01 13:00')使查询更具可读性。每个查询只执行一次转换,因此不会造成性能损失。