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

我在服务器端使用PHP。


当前回答

时间戳和日期时间之间的另一个区别是时间戳,不能将默认值设置为NULL。

其他回答

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

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

根据我的经验,如果您想要一个插入仅发生一次的日期字段,并且不想对该特定字段进行任何更新或任何其他操作,请使用日期时间。

例如,考虑具有REGISTRATION DATE字段的用户表。在该用户表中,如果您想知道特定用户的上次登录时间,请使用时间戳类型的字段,以便更新该字段。

如果您是从phpMyAdmin创建表,则默认设置将在行更新发生时更新时间戳字段。如果时间戳字段未随行更新而更新,则可以使用以下查询使时间戳字段自动更新。

ALTER TABLE your_table
      MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

时间戳和日期时间之间的另一个区别是时间戳,不能将默认值设置为NULL。

我喜欢Unix时间戳,因为你可以转换成数字,只需担心数字。此外,您还可以添加/减去和获取持续时间等。然后将结果转换为任何格式的日期。这段代码找出文档的时间戳和当前时间之间经过了多少时间(以分钟为单位)。

$date  = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now  - $result) / 60);
$min = round($unix_diff_min);

DATETIME、TIMESTAMP和DATE之间的比较

那是什么[分数]?

DATETIME或TIMESTAMP值可以包含尾随小数秒部分,精度高达微秒(6位数)。在里面特别是,插入DATETIME的值中的任何小数部分或TIMESTAMP列被存储而不是丢弃。这当然是可选的。

来源:

MySQL日期/时间数据类型参考MySQL存储要求参考