我在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扩展(是的,我知道它已被弃用,但我必须维护一些遗留代码)
答案 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)