您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?

我在服务器端使用PHP。


当前回答

我是基于语义做出这个决定的。

当我需要记录(或多或少)固定时间点时,我使用时间戳。例如,当记录被插入到数据库中时,或者当发生某些用户操作时。

当可以任意设置和更改日期/时间时,我使用datetime字段。例如,当用户可以保存以后的更改约会时。

其他回答

我只在存储UTC时使用无符号BIGINT。。。

然后仍然可以在PHP中将其调整为本地时间。

要使用FROM_UNIXTIME(integer_timestamp_column)选择的DATETIME。

显然,应该在该列上设置索引,否则不会有任何进展。

MySQL中的时间戳通常用于跟踪记录的更改,并且经常在每次更改记录时更新。如果要存储特定值,应使用datetime字段。

如果您希望在使用UNIX时间戳或本机MySQL日期时间字段之间做出选择,请使用本机datetime格式。您可以通过这种方式在MySQL中进行计算(“SELECT DATE_ADD(my_datetime,INTERVAL 1 DAY)”),如果您想用PHP对记录进行操作,那么在查询记录时,很容易将值的格式更改为UNIX时间戳(“SELECT UNIX_timestamp(my_datatime)”)。

值得注意的是,在MySQL中,您可以在创建表列时使用以下内容:

on update CURRENT_TIMESTAMP

这将更新每次修改行时的时间,有时对存储的上次编辑信息非常有用。这只适用于时间戳,但不适用于日期时间。

TIMESTAMP是四个字节,而DATETIME是八个字节。时间戳在数据库上也更轻,索引速度更快。DATETIME类型在您需要同时包含日期和时间信息的值时使用。MySQL以YYYY-MM-DD HH:MM:SS格式检索并显示DATETIME值。支持的范围为1000-01-01 00:00:00至9999-12-31 23:59:59。TIMESTAMP数据类型的范围为1970-01-01 00:00:01 UTC到2038-01-09 03:14:07 UTC。它具有不同的财产,具体取决于MySQL版本和服务器运行的SQL模式。DATETIME是常量,而TIMESTAMP受时区设置的影响。

+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
|                                       TIMESTAMP                                       |                                 DATETIME                                 |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP requires 4 bytes.                                                           | DATETIME requires 8 bytes.                                               |
| Timestamp is the number of seconds that have elapsed since January 1, 1970 00:00 UTC. | DATETIME is a text displays 'YYYY-MM-DD HH:MM:SS' format.                |
| TIMESTAMP supported range: ‘1970-01-01 00:00:01′ UTC to ‘2038-01-19 03:14:07′ UTC.    | DATETIME supported range: ‘1000-01-01 00:00:00′ to ‘9999-12-31 23:59:59′ |
| TIMESTAMP during retrieval converted back to the current time zone.                   | DATETIME can not do this.                                                |
| TIMESTAMP is used mostly for metadata i.e. row created/modified and audit purpose.    | DATETIME is used mostly for user-data.                                   |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+