TIMESTAMP与DATETIME在MySQL中的区别

3

我需要将数据库从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功能,以避免从数据库中获取混合数据引起问题吗?

1个回答

4

所有TIMESTAMP数据在内部存储为4字节整数,表示自Unix纪元以来的秒数。您在软件中看到的呈现方式取决于您的软件如何呈现此数据。例如,如果您更改时区,则会影响从TIMESTAMP列读取的数据(因为Unix纪元是UTC时间)。

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

查询TIMESTAMP列时,MySQL默认会以人类可读的形式格式化它们,因此不要期望从这些列中获得整数。您将获得一个字符串,格式为YYYY-MM-DD HH:MM:SS,与DATETIME字段相同。


是的。您将获得与 DATETIME 字段相同的格式,因此 strtotime 将正常工作。 - Mchl
所以,当它更新时,它将是一个数字格式,我仍然在数字格式上使用strtotime吗? - Solomon Closson
1
哎呀,你的更新答案帮了很多忙。我一直以为TIMESTAMP实际上是指时间戳,就像在php中的timestamp那样,但现在我想我明白了。非常感谢! - Solomon Closson
1
它在内部以数值形式存储,但除非使用UNIX_TIMESTAMP函数,否则您永远不会看到这个数值。所有查询默认都会返回格式化日期的字符串。 - Mchl
1
太好了。我再重申一次:在导入日期之前,请确保设置正确的时区。否则,当你的所有数据突然向前或向后移动几个小时时,你可能会感到惊讶。https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html - Mchl
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接