TIMESTAMP vs. DATETIME MySQL
我需要将一个数据库从SQL转换为MySQL,并成功地做到了这一点,但是这个问题现在更倾向于MySQL。
我注意到,我可以将DateTime字符串插入到Timestamp列类型中,从我听说的接受日期时间戳或实际时间戳的时间戳来看,这一切都很好,不过,我现在对"ON UPDATE CURRENT_TIMESTAMP"很好奇,因为我把它放在数据库的一列中,因为它只能在Timestamp上使用。类型。当它基于CURRENT_TIMESTAMP进行更新时,是否会使用非格式的时间戳:YYYY-MM-DD HH:MM:SS?
这将如何影响我从该列中提取的数据?
例如,当某些日期可能是数字时间戳,而其他日期可能是日期时间戳格式时,从时间戳列获取当前日期/时间是否困难?我是否应该只使用datetime作为此列的类型,而不使用ON_UPDATE功能来避免来自此处数据库的混合数据出现问题?
在内部,所有TIMESTAMP数据都存储为4字节整数,表示自unix epoch以来的秒数。您在软件中看到的内容取决于软件如何显示这些数据。例如,如果将时区更改为不同的时区,它将对从TIMESTAMP列读取的数据产生影响(因为unix epoch的格式是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,所以没有进行任何转换。
- 它已被转换。相信我:)这只是你的客户以人性化的方式展示的。
- 使用phpmyadmin,它仍然将它们显示为YYYY-MM-DD HH:MM:SS字符串。另外,通过php从数据库中获取这些信息的最佳方法是什么?我还需要使用strtotime函数转换成时间吗?
- 对。您将得到与从datetime字段中获得的格式完全相同的格式,因此strtotime的工作方式将完全相同。
- 所以,当它更新时,它将是一个数字格式,而我仍然在数字格式上使用strtotime?
- 你的最新答案帮助很大。我认为时间戳实际上意味着时间戳,就像php timestamp中的那样,但我想我现在已经理解了。多谢!
- 它在内部存储为数值,但除非使用UNIX_TIMESTAMP函数,否则永远不会看到该数值。默认情况下,所有查询都将返回带格式日期的字符串。
- 杰出的。我再重申一次:在导入日期之前,请确保设置了正确的时区。否则,当您的所有数据突然向前或向后移动几个小时时,您可能会大吃一惊。dev.mysql.com/doc/refman/5.5/en/time-zone-support.html版本