為什麼MYSQL timestamp取值範圍是 1970-01-01 00:00:00 到 2038-01-19 3:14:07

gaopengtttt發表於2016-04-08
TIMESTAMP和DATETIME的取值範圍不同同時儲存不同,
TIMESTAMP佔四個位元組取值範圍為 1970-01-01 00:00:00 到 2038-01-19  3:14:07
那麼為什麼是這個取值範圍呢 4個位元組明顯不夠儲存日期格式。4位元組為2^32次方
那麼我們可以分析timestamp實際是C語言的一個INT 型別帶符號位的。
用ORACLE的格式算出來為
SQL> select to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')+(power(2,31)-1)/(60*60*24) from dual;
TO_DATE('1970-01-0100:00:00','
------------------------------
2038/1/19 3:14:07

2^31是因為帶了符號位少了一位。所以是31次方,而減一因為從0開始而不是1,比如2的8次方為256但是實際的數值是0~255(FF)
可以想到TIMESTAMP實際是一個相加的過程 他儲存在內部格式是一個表示秒的 int型別 帶符號位

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2077609/,如需轉載,請註明出處,否則將追究法律責任。

相關文章