【问题标题】:Why can't I use php time() for a timestamp column?为什么我不能将 php time() 用于时间戳列?
【发布时间】:2013-10-29 14:04:53
【问题描述】:

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

【问题讨论】:

  • But when I use the php function time() to get the timestamp, it doesn't work. -- 你如何使用它?向我们展示代码。
  • 使用 date('Y-m-d H:i:s)` 代替
  • @ArunKillu 我知道我可以使用日期 - 我已经在我的问题中写了这个。
  • @JanWy 好的,这只是检查echo time()

标签: php mysql sql timestamp


【解决方案1】:

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

还要检查 mysql 中的 documention of various date time 类型

【讨论】:

  • 啊,我明白了!我很困惑,因为我认为 mysql CURRENT_TIMESTAMP 返回一个 unix 时间戳 - 但它没有,它是你写的日期时间值。当我做SELECT CURRENT_TIMESTAMP + 0 时,结果是20131029151327.000000
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    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)

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-29
        • 2023-01-09
        • 2017-01-31
        • 2013-02-05
        • 2017-11-09
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多