mysql5.6 timestamp

时间:2021-04-30 07:10:24

1.timestamp 默认值

CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP   在创建新记录和修改现有记录的时候都对这个数据列刷新
CURRENT_TIMESTAMP 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它

2.timestamp 可以指定微秒位数

CURRENT_TIMESTAMP(X)  X最大为6

3.TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为微秒

如:2015-09-08 09:11:18.131858

在MySQL5.5里(或更老的版本MySQL5.1)timestamp类型一个表里只允许一列字段拥有自动插入时间和自动更新时间、或只允许一列字段有自动插入时间,另一列字段不能有自动更新时间。

但从MySQL5.6里,打翻了这一传统理念,以上条件均可以出现,并且datetime类型也拥有了timestamp类型的功能。

以下是演示:

这是MySQL5.5的(timestamp类型一个表里只允许一列字段拥有自动插入时间和自动更新时间):

mysql5.6  timestamp

mysql5.6  timestamp

========================================================================

这是MySQL5.6的(timestamp类型一个表里可以有多列字段拥有自动插入时间和自动更新时间):

mysql5.6  timestamp

mysql5.6  timestamp

========================================================================

这是MySQL5.5的(只允许一列字段有自动插入时间,另一列字段不能有自动更新时间)

mysql5.6  timestamp

========================================================================

这是MySQL5.6的(一列字段有自动插入时间,另一列字段也能有自动更新时间)

mysql5.6  timestamp

mysql5.6  timestamp

========================================================================

MySQL5.6(datetime类型也拥有了timestamp类型的功能)

mysql5.6  timestamp

mysql5.6  timestamp

TIMESTAMP在MySQL5.6中的行为

  • 支持多个CURRENT_TIMESTAMP 默认值
  • 可以兼容5.5的行为,支持隐性默认值 
    • explicit_defaults_for_timestamp=0
    • 我测试安装的MySQL5.6默认使用这个参数,启动时,服务器会给出一个警告。 
      [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
  • 可以去掉隐性默认值 
    • explicit_defaults_for_timestamp=1

总结

    • MySQL5.5中TIMESTAMP行为是比较诡异的,会造成一些隐含的问题,比如程序中传入了NULL值
    • MySQL5.6中可以将TIMESTAMP的行为变得正常,但会存在兼容问题
    • explicit_defaults_for_timestamp参数未来会消失
    • 我们不要过度依赖数据库的特性,这些特性会给应用程序造成掣肘