0

timestamp在 db 表中有一个列。通过以下方式保存值:

UPDATE `table` SET `activated_at` = CURRENT_TIMESTAMP WHERE `id` = 123;

工作正常。

但是当我使用php函数time()获取时间戳时,它不起作用。它仅适用date('Y-m-d H:i:s')于列值。问题是为什么?

列定义是:

`activated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'

我正在使用 php mysql 扩展(是的,我知道它已被弃用,但我必须维护一些遗留代码)

4

4 回答 4

3

由于php 中的time()返回一个 unix 时间戳,而时间戳是一个日期时间类型,它需要一个有效的日期时间值。如果你没有给出一个有效的日期时间值,它将像0000-00-00 00:00:00. 如果你想保持你的字段为日期时间类型,那么你必须date('Y-m-d H:i:s')在 php

还要检查mysql中各种日期时间类型的文档

于 2013-10-29T14:07:13.573 回答
2

time()返回一个 unix 时间戳,但 MySQL 时间戳列支持特定格式,例如YYYY-MM-DD HH:II:SS. date您可以使用PHP 或FROM_UNIXTIMEmysql轻松进行转换。

于 2013-10-29T14:08:19.663 回答
0

如果你想使用 time() 将列类型更改为 varchar(15)

于 2013-10-29T14:08:55.967 回答
0

这里

TIMESTAMP 数据类型用于同时包含日期和时间部分的值。TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。

MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。(这不会发生在其他类型,例如 DATETIME。)默认情况下,每个连接的当前时区是服务器的时间。可以基于每个连接设置时区。只要时区设置保持不变,您就可以返回存储的相同值。如果您存储一个 TIMESTAMP 值,然后更改时区并检索该值,则检索到的值与您存储的值不同。发生这种情况是因为没有使用同一时区进行双向转换。当前时区可用作 time_zone 系统变量的值。有关详细信息,请参阅第 10.6 节,“MySQL 服务器时区支持”</p>

*nix 时间戳和 MySQL TIMESTAMP 不一样...这就是为什么您需要将 *nix 时间戳转换为 MySQL 时间戳date('Y-m-d H:i:s', $unix_timestamp)

于 2013-10-29T14:09:01.877 回答