14

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

4

3 回答 3

17

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

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

于 2010-01-08T22:35:00.833 回答
13

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

我很好奇您为什么要牺牲 MySQL 开发人员为使时间戳按应有的方式工作而付出的所有辛勤工作,并用几乎肯定不会正常工作的东西来代替它。

由于您没有说明为什么要使用整数,所以我只是假设这是暂时的精神错乱,您很快就会康复:-)

于 2010-01-08T22:33:48.243 回答
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:01UTC 到2038-01-19 03:14:07UTC。然后,有一些语义问题需要注意:

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

  • date 存储日历天,日期时间和时间戳都以秒精度存储日期+时间(日期算术支持亚秒精度,但不用于存储)
  • 时间戳存储一个 UTC 值。也就是说,您插入的任何值都会从会话的时区(默认情况下,服务器的时区)转换为 UTC 并存储。检索时,UTC 值将再次转换回会话中有效的时区。
  • 可以声明时间戳以在插入或更新或两者时自动获取当前时间戳。你最好研究一下手册的细节(见http://dev.mysql.com/doc/refman/5.1/en/timestamp.html
于 2010-01-08T22:58:30.043 回答