为什么我不能使用php time()作为时间戳列?

时间:2013-10-29 14:04:54

标签: php mysql sql timestamp

我在db表中有一个timestamp列。使用以下方法保存值:

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 个答案:

答案 0 :(得分:3)

由于php中的time()返回一个unix时间戳,而timestamp是一个日期时间类型,它会重新获得一个有效的日期时间值。如果你没有给出一个有效的日期时间值,它将像0000-00-00 00:00:00那样存储。如果您希望将字段保留为日期时间类型,则必须在php中提供date('Y-m-d H:i:s')

同时检查mysql中的documention of various date time类型

答案 1 :(得分:2)

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

答案 2 :(得分:0)

如果要使用time(),请将列类型更改为varchar(15)

答案 3 :(得分:0)

here

  

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服务器时区支持”

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