我有一个日志记录表,出于统计原因,该表将包含数百万的写入。所有列都是int外键。我还将为每一行添加一个时间戳列。鉴于DATETIME占用8位-我将int(10) unsigned用来将存储空间(和该列的索引)减少一半。
int(10) unsigned
但是,我想知道此列何时不再起作用。在2038年1月19日凌晨3:14:07,对于UNIX时间戳,值9,999,999,999将是一个问题- 但是MySQL中的unsigned int仅可容纳4,294,967,295,时间戳4294967295在我的PHP应用程序中显示了无效的数字。
那么这是什么意思? 由于无法一直到9999999999,MySQL中存储int时间戳的结尾是否会在2021年某个时候结束?
回答:
unsigned
标准UNIX时间戳是带符号的32位整数,在MySQL中是常规的“ int”列。您无法存储9,999,999,999,因为这超出了表示范围- 任何类型的32位int最高可以达到4,294,967,295。签名的最高32位为2,147,483,647。
如果/当UNIX时间戳记变为64位数据类型时,则必须使用MySQL“ bigint”来存储它们。
至于int(10),该(10)部分仅用于显示目的。MySQL仍将在内部使用完整的32位存储数字,但是只要您在表上进行选择,则仅显示10。
int(10)
(10)