我需要在MySQL数据库中存储日期(时间)。我希望能够按照自己喜欢的方式格式化这些内容。那么在MySQL数据库中存储日期的最佳方法是什么?DATETIME类型,TIMESTAMP类型还是简单的数字数据类型中的unix时间戳?我将使用 PHP 检索日期。
通常使用TIMESTAMP
或DATETIME
数据类型并不重要。
- 在旧版本中,
TIMESTAMP
为 4 个字节,DATETIME
个为 8 个字节。 - 把
DATETIME
想象成时钟的图片;把TIMESTAMP
想象成全世界的一个瞬间。 也就是说,如果连接到同一数据库,但来自不同的时区,则DATETIME
看起来相同,但TIMESTAMP
将针对时区进行调整。 -
NOW()
,SELECTing
成PHP等,都与两者兼容。 - 两者在外部都被视为字符串,例如'2015-04-25 17:09:01'。
- 由于
TIMESTAMP
存储为 32 位整数(但您看不到),因此它仅限于 ~1970-2038。 - 由于
DATETIME
是时钟时间,因此如果您切换到夏令时/从夏令时切换到/从夏令时切换,每年两次将缺少/额外一小时。
是的,您可以使用UNIX_TIMESTAMP()
并有一个INT UNSIGNED
,但是看到"2015-...不是更好吗? (这将是 4 个字节。
DateTime类型在mysql中使用now()存储时间戳并插入当前时间戳,或者通过您认为合适的任何方法获取日期/时间戳。
我更喜欢存储它,只要它总是来自纪元并代表UTC。当我们必须迎合不同的本地化和时区方面时,这会有所帮助 - 其他明智的做法是我们最终会将值存储在数据库服务器默认或 JVM 默认语言环境中。