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

时间:2015-04-25 13:23:32

标签: mysql database-design timestamp

我需要在MySQL数据库中存储日期(随时间)。我希望能够格式化这些我喜欢的方式。那么在MySQL数据库中存储日期的最佳方法是什么? DATETIME类型,TIMESTAMP类型或简单的数字数据类型中的unix时间戳?我将使用PHP检索日期。

3 个答案:

答案 0 :(得分:2)

通常使用TIMESTAMPDATETIME数据类型无关紧要。

  • 在旧版本中,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个字节。)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我更喜欢将它存储为始终来自时代并表示UTC的长度。这有助于我们必须迎合不同的本地化和时区方面 - 另外,我们最终会在DB服务器默认或JVM默认语言环境中存储值。