还是之前工作中遇到的一个小问题。我在做一个收据采集的程序,需要记录起始时间和结束时间,在数据库中是用timestamp字段来保存的,有些情况下不存在起始时间,此时就需要设置一个默认的起始时间,当初想着是使用timestamp类型的『最小值』。

然而,从1970-01-01 00:00:001970-01-01 00:00:01,保存到数据库的时候总是报错,后面使用1970-01-01 08:00:01终于就正常了。后来又参考了
http://blog.itpub.net/25281640/viewspace-710118/
这篇文章的观点论证了。

从此开始我就认为timestamp的范围,就像文章的观点,真正的范围是从1970-01-01 08:00:01 到 2038-01-19 11:14:07。这个08:00:01当时并没有引起我的注意,最近不知怎么突然想起来,感觉不对。

从MySQL的官方文档就可以得到结论,http://dev.mysql.com/doc/refman/5.0/en/datetime.html

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.) By default, the current time zone for each connection is the server's time. The time zone can be set on a per-connection basis. As long as the time zone setting remains constant, you get back the same value you store. If you store a TIMESTAMP value, and then change the time zone and retrieve the value, the retrieved value is different from the value you stored. This occurs because the same time zone was not used for conversion in both directions. The current time zone is available as the value of the time_zone system variable. For more information, see Section 10.6, “MySQL Server Time Zone Support”.

timestamp类型的起始时间是1970-01-01 00:00:01 UTC,和时区是关系的。如果我没有理解错的话,MySQL将timestamp类型的值保存的时候,会从当前时区转成UTC时间,正好解释了前面1970-01-01 00:00:001970-01-01 00:00:01两个值保存时出错的问题了。从当前时区转成UTC时间需要减去『8小时』,结果就不在timestamp类型的范围内了。

MySQL的timestamp字段可以使用的范围是多少相关推荐

  1. timestamp mysql php_PHP和Mysql的Timestamp互换

    在mysql中有三种时间字段类型: DATETIME,DATE和TIMESTAMP. DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据: DATE则是只有年月日以YYYY ...

  2. MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较

    from: http://www.piaoyi.org/database/MYSQL-INT-TIMESTAMP-DATETIME.html Author:飘易 Source:飘易 Categorie ...

  3. MySQL的timestamp类型自动更新问题

    今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...

  4. mysql中timestamp,datetime,int类型的区别与优劣

    int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datet ...

  5. mysql数据类型、字段类型

    mysql数据类型.字段类型 1. mysql的数据类型 在mysql中有如下几种数据类型: (1)数值型 数值是诸如32 或153.4 这样的值.mysql 支持科学表示法,科学表示法由整数或浮点数 ...

  6. mysql中数据库字段类型长度_Mysql数据库字段数据类型、长度详解

    一.数值类型 列类型 需要的存储量 TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIGINT 8 个字节 F ...

  7. mysql栏的范围外值,MySQL中各种字段的取值范围-数据库专栏,MySQL

    mysql中各种字段的取值范围过节回来,网站更新的第一篇文章. 看来我有必要在最近找到一位志同道合的同学一起来维护站点才行了----------------------tinyint -128 – 1 ...

  8. MYSQL中TIMESTAMP类型的默认值

    MYSQL中TIMESTAMP类型的默认值    MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...

  9. Mysql的timestamp与datetime

    1.MySQL表示当前时间 CURRENT_TIMESTAMP CURRENT_TIMESTAMP() NOW() LOCALTIME LOCALTIME() LOCALTIMESTAMP LOCAL ...

最新文章

  1. 如何在Java中比较日期? [重复]
  2. 基于FT5x06嵌入式Linux电容触摸屏驱动
  3. Lucene工具箱之OpenBitSet(一)
  4. SQL case when then 的用法
  5. 4.编写程序,打印1到100之内的整数,但数字中包含7的要跳过
  6. Defination list(定义列表)
  7. android+动画+锯齿,Android当中的防锯齿(Bitmap Canvas )
  8. VS2008调试总结
  9. java swt designerpdf_eclipse学习笔记!(4) ----- SWT Designer 下 SWT常用组件
  10. Linux性能调优集合
  11. Await Async和Thread.waitAll想法?未完待续
  12. C++标准模板(STL)- 算法 (std::adjacent_find)
  13. Lab: Blind SQL injection with time delays and information retrieval:时间延迟盲注和信息检索两个靶场复盘
  14. java什么是布尔型_Java新职篇:是什么是布尔型?
  15. vvv在线文档导出工具_墙裂推荐一个好用的在线文档编辑工具
  16. 明翰全日制英国硕士学术写作V0.1(持续更新)
  17. iptables防火墙和firewalld防火墙
  18. 最大公约数 / 最小公倍数
  19. Leaflet包:从入门到跑路(一)
  20. web前端基础——第八章

热门文章

  1. UNIX(多线程):13---condition_variable、wait、notify_one、notify_all
  2. Linux下的lua和boost c++的搭建和安装
  3. 《机器学习实战》笔记(02):k-近邻算法
  4. 面试题——死锁的实现
  5. 区块链技术指南 第一章 区块链和比特币的初体验
  6. c++面向对象高级编程 学习十四 引用
  7. linux 32位平台,文件大小受限于2G的解决方法
  8. HEVC/H265 主要设计者谈HEVC/H265
  9. FileStream功能被禁用
  10. (项目)在线教育平台(六)