ITPub博客

首页 > 数据库 > MySQL > 为什么MYSQL timestamp取值范围是 1970-01-01 00:00:00 到 2038-01-19 3:14:07

为什么MYSQL timestamp取值范围是 1970-01-01 00:00:00 到 2038-01-19 3:14:07

原创 MySQL 作者:gaopengtttt 时间:2016-04-08 18:29:44 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
wxh gp_22389860 <<深入理解MySQL主从原理专栏>> 发布 可加WX了解

注册时间:2008-10-13

  • 博文量
    756
  • 访问量
    3188589