Mysql 将时间数据存储为Int或Timestamp更好吗?

Mysql 将时间数据存储为Int或Timestamp更好吗?,mysql,sql,time,Mysql,Sql,Time,使用MySQL,我应该将时间数据存储为Int,即自1970年1月1日UTC午夜以来的毫秒数,或者存储为数据库中的时间戳 我知道这两种方法都有优点,哪一种是最好的方法?从PHP代码的角度来看不能肯定,但是以MySQL datetime格式存储它可以打开所有MySQL日期/时间函数,而无需先从UNIXTIME转换。此外,时间戳的限制为2038年-参见 正如注释所说,您可以采用任何一种方式进行转换,因此这就成了一个问题:您希望在哪里最方便—在SQL语句或PHP代码中 恕我直言,时间/日期不仅仅是一个数

使用MySQL,我应该将时间数据存储为Int,即自1970年1月1日UTC午夜以来的毫秒数,或者存储为数据库中的时间戳


我知道这两种方法都有优点,哪一种是最好的方法?

从PHP代码的角度来看不能肯定,但是以MySQL datetime格式存储它可以打开所有MySQL日期/时间函数,而无需先从UNIXTIME转换。此外,时间戳的限制为2038年-参见

正如注释所说,您可以采用任何一种方式进行转换,因此这就成了一个问题:您希望在哪里最方便—在SQL语句或PHP代码中


恕我直言,时间/日期不仅仅是一个数字——在我们使用它们的过程中,它们有特殊的用途,因此将它们存储为一个数字会限制你自己。

在MySQL中使用时间戳时,还有一些其他的事情需要考虑

在数据库中,每个表只允许有一个时间戳列(不允许,请参见下面的编辑)

使用时间戳列可以做的一件很酷的事情是,在更新当前时间戳时可以使用默认的当前时间戳(同样,您只能得到一个可以这样做的列)

除此之外,我认为这是使用这些专栏的唯一动机

编辑: 一个表中可以有多个时间戳列。但是,每个表只能有一个默认的当前时间戳。请注意,如果将列添加到表中:

ALTER TABLE\u name添加列col\u name时间戳


该表中没有另一个timestamp列,它隐式地将其添加到定义中。至少在MySQL 5.0.92上。请参阅下面的讨论。

无论存储何种格式,都有可能将其转换为另一种格式。谷歌排名前4位的搜索结果中有3个是关于同一主题的问题,没有一个回答了你的问题?时间类型不是选项吗?这似乎是最直截了当的。我个人使用DATETIME作为我所有的时间数据。。。。存储为int是没有意义的。。。已经好几年没有使用时间戳了。。。。DATETIME就是它的位置…当我输入问题时,没有相关的问题出现,所以我假设问题没有被问到。每个表允许有多个
TIMESTAMP
列。您可能认为您不能有超过一个设置了
UPDATE CURRENT\u TIMESTAMP
标志您是对的,我说错了。但是你说的也不完全正确。如果使用默认的CURRENT\u TIMESTAMP,或者更新CURRENT\u TIMESTAMP,那么就不能有另一个TIMESTAMP列,即使它没有其他内容。我将编辑这篇文章。我不确定这是真的,我只是运行了
创建表table2(time1 timestamp NULL,time2 timestamp NULL更新当前_timestamp)而且它起作用了…我明白了。你说得对。我不知道的是,如果使用不带修饰符(NULL/DEFAULT/etc)的时间戳类型,它会在更新当前时间戳时隐式地添加默认的当前时间戳。例如,此查询失败:
创建表table3(time1时间戳,time2时间戳更新当前的\u时间戳)我重新编辑了原始注释。