2012-07-27 66 views
0

在我的许多MySQL数据库表中,我一直在int UNSIGNED字段中存储时间戳(来自php time())。但是,如果我记得正确,time()会返回13个数字值,而INT UNSIGNED会存储长度只有10个数字的2147483647。因此,由time()返回的任何值都将太大而无法存储在int字段中。与MySQL如何存储INT不一致?

但是,我的时间戳都没有被截断,所以它如何能够存储如此大的值?这是数据库不一致还是我错过了什么?

回答

2

1343399732自从epoch(1970)以来已经过去了秒,它可以存储在一个有符号的int中。

它处理与2038大约有关的秒数,当您将秒存储在带符号的32位整数中时,会开始导致麻烦。

+1

不,你的回答是无效的,实际上从现在开始已经过了1343399803秒。 :] – 2012-07-27 14:39:28

+0

啊,我一定是错误的数字..所以这是臭名昭着的y2k38问题?当然,快速解决这个问题(虽然不是美艳的)会在到时候将字段类型改为“BIGINT UNSIGNED”。 – 2012-07-27 14:41:49