我应该在 MySQL 中使用大整数还是常规整数来存储时间戳?我计划将其存储在 INT 中,而不是内置的时间戳或日期时间,那么我应该使用哪种 INT 类型?
问问题
17621 次
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-01
到9999-12-31
.DATETIME
- 8 个字节,范围1000-01-01 00:00:00
为9999-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)
- date 存储日历天,日期时间和时间戳都以秒精度存储日期+时间(日期算术支持亚秒精度,但不用于存储)
- 时间戳存储一个 UTC 值。也就是说,您插入的任何值都会从会话的时区(默认情况下,服务器的时区)转换为 UTC 并存储。检索时,UTC 值将再次转换回会话中有效的时区。
- 可以声明时间戳以在插入或更新或两者时自动获取当前时间戳。你最好研究一下手册的细节(见http://dev.mysql.com/doc/refman/5.1/en/timestamp.html)
于 2010-01-08T22:58:30.043 回答