我应该在MySQL中使用大型INT还是常规INT来存储时间戳?

时间:2010-01-08 22:29:16

标签: mysql integer biginteger

我应该在MySQL中使用大整数还是常规整数来存储timerstamp?我计划将它存储在INT而不是内置的时间戳或日期时间中,以便我应该使用哪种INT类型?

3 个答案:

答案 0 :(得分:14)

您应该将其存储在时间戳中,因为这很可能是DBMS针对时间戳数据进行优化的。

我很好奇为什么你会牺牲MySQL开发人员为使时间戳按照他们应该的方式工作而付出的所有努力,并用几乎肯定不会起作用的东西替换它。

由于你没有陈述为什么你想要使用一个整数,我只是假设它是暂时的疯狂,你很快就会恢复: - )

答案 1 :(得分:13)

Int将在2038年翻转为负数(如果您使用的是UNIX时间戳):http://en.wikipedia.org/wiki/2038_problem

所以BIGINT可能是最安全的选择

答案 2 :(得分:9)

我认为这完全取决于你想做什么。时间/日期类型有一些合适的类型(参见:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-type-overview.html

  • DATE - 通常为3个字节,范围:1000-01-019999-12-31
  • DATETIME - 8个字节,范围1000-01-01 00:00:009999-12-31 23:59:59
  • TIMESTAMP - 4个字节范围1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC。 然后,有一些语义问题需要注意:

(int是4个字节,如TIMESTAMP,bigint是8个字节,如DATETIME)

  • 日期存储日历天数,日期时间和时间戳,以第二个精度存储日期+时间(日期算术支持亚秒精度,但存储不支持)
  • timestamp存储UTC值。也就是说,您在那里粘贴的任何值都会从会话的时区(默认情况下,服务器的时区)转换为UTC并存储。在检索时,UTC值将再次转换回会话中生效的时区。
  • 时间戳可以声明为自动获取插入或更新时的当前时间戳或两者。您最好学习手册了解详情(参见http://dev.mysql.com/doc/refman/5.1/en/timestamp.html
相关问题