在 MySQL 中将日期存储为 unix 时间戳或 TIMESTAMP 数据类型?

Store date as unix timestamp or TIMESTAMP data type in MySQL?

我需要在 MySQL 数据库中存储日期(带时间)。我希望能够按照我喜欢的方式格式化这些。那么在 MySQL 数据库中存储日期的最佳方式是什么? DATETIME 类型、TIMESTAMP 类型或只是数字数据类型中的 unix 时间戳?我将使用 PHP.

检索日期

您可以使用 DateTime 类型来存储时间戳,并使用 now() 在 mysql 中插入当前时间戳,或者通过您认为合适的任何方法获取 dates/timestamps。

通常使用TIMESTAMPDATETIME数据类型并不重要。

  • 在旧版本中,TIMESTAMP 是 4 个字节,DATETIME 是 8 个字节。
  • DATETIME 想象成时钟的图片;将 TIMESTAMP 视为全球范围内的一个瞬间。也就是说,如果您连接到同一个数据库,但来自不同的时区,DATETIME 看起来是一样的,但是 TIMESTAMP 会针对时区进行调整。
  • NOW()SELECTing变成PHP等,两者都兼容。
  • 两者在外部都被视为字符串,例如'2015-04-25 17:09:01'。
  • 由于 TIMESTAMP 存储为 32 位整数(但您看不到),因此限制为 ~1970-2038。
  • 由于 DATETIME 是时钟时间,如果切换 to/from 夏令时,每年将有两次 missing/extra 小时。

是的,您可以使用 UNIX_TIMESTAMP() 并使用 INT UNSIGNED,但是看到“2015-...”不是更好吗? (那将是 4 个字节。)

我更喜欢存储它,它总是来自纪元并代表 UTC。当我们必须迎合不同的本地化和时区方面时,这会有所帮助 - 否则我们最终会在数据库服务器默认或 JVM 默认区域设置中存储值。