【问题标题】:TIMESTAMP vs. DATETIME MySQL [duplicate]TIMESTAMP 与 DATETIME MySQL [重复]
【发布时间】:2017-01-25 21:38:16
【问题描述】:

我需要将数据库从 SQL 转换为 MySQL,并且成功地完成了,但是,这个问题现在更适合 MySQL。

我注意到我能够将 DateTime 字符串插入到 Timestamp 列类型中,这一切都很好,从我听说 Timestamp 接受 DateTime 或实际 Timestamps 的消息来看,但是,我很好奇关于"ON UPDATE CURRENT_TIMESTAMP" 现在因为我将它放在数据库的列上,因为它只能用于Timestamp 类型。当它基于CURRENT_TIMESTAMP 更新时,这是否会使用格式不是YYYY-MM-DD HH:MM:SS 的时间戳?

这将如何影响我从该列中提取的数据?

例如,当某些日期可能是数字时间戳,而其他日期可能是 DATETIME 格式时,是否难以从 TIMESTAMP 列中获取当前日期/时间?我是否应该只使用 DATETIME 作为此列的类型,而没有 ON_UPDATE 的能力来避免来自此处的数据库的混合数据出现问题?

【问题讨论】:

    标签: php mysql date datetime timestamp


    【解决方案1】:

    在内部,所有 TIMESTAMP 数据都存储为 4 字节整数,表示自 Unix epoch 以来的秒数。您在软件中看到的内容取决于您的软件如何呈现这些数据。例如,如果您将时区更改为其他时区,它将影响从TIMESTAMP 列读取的数据(因为 Unix 纪元是 UTC)

    不会有数据混合。 MySQL 将负责将您的 YYYY-MM-DD HH:MM:SS 转换为时间戳。不过要注意时区!

    当查询TIMESTAMP 列时,默认情况下,MySQL 会将它们格式化为人类可读的格式,因此不要期望从这些中获取整数。您将得到一个格式为 YYYY-MM-DD HH:MM:SS 的字符串,就像来自 DATETIME 字段一样。

    【讨论】:

    • 好吧,现在我将一些列更改为 TIMESTAMP,但 Mysql 仍然将它们显示为格式为字符串:YYYY-MM-DD HH:MM:SS,因此没有进行任何转换。
    • 已转换。相信我 :) 只是您的客户以人性化的格式展示了这一点。
    • Awwww,您更新的答案很有帮助。我在想 TIMESTAMP 实际上意味着一个时间戳,如 php timestamp,但我想我现在明白了。非常感谢!
    • 它在内部存储为数值,但你永远不会看到这个数值,除非你使用UNIX_TIMESTAMP函数。默认情况下,所有查询都将返回带有格式化日期的字符串。
    • 优秀。我将再次重申:确保在导入日期之前设置正确的时区。否则,当您的所有数据突然提前或落后几个小时移动时,您可能会大吃一惊。 dev.mysql.com/doc/refman/5.5/en/time-zone-support.html
    猜你喜欢
    • 2011-02-01
    • 2015-04-20
    • 1970-01-01
    • 2017-07-08
    • 2016-10-30
    • 2011-05-09
    • 1970-01-01
    • 2015-04-22
    • 2016-10-19
    相关资源
    最近更新 更多