MySQL5.6中TIMESTAMP的变化分析

叶子小小的,碧绿碧绿的,花儿小小的,好可爱。紫红色的玫瑰花在风中翩翩起舞,玫瑰花树枝上还有调皮又可爱的小刺,你可要当心哦!你看,那个大仙人球旁围着8个小仙人球,好像一家人聚在一起,多欢快呀!

在MySQL 5.6.6之前,TIMESTAMP的默认行为:

■TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL。(而其他数据类型,如果没有显示声明为NOT NULL,则允许NULL值。)设置TIMESTAMP的列值为NULL,会自动存储为当前timestamp。
■表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
■表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,默认自动分配'0000-00-00 00:00:00′。插入行时没有指明改列的值,该列默认分配'0000-00-00 00:00:00′,且没有警告。

2列TIMESTAMP未声明为NULL的默认行为

从MySQL5.6.6开始这种默认设置的方法被废弃了。在MySQL启动时会出现以下警告:

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. 
Please use --explicit_defaults_for_timestamp server option 
(seedocumentation for more details).

关闭警告,在my.cnf中加入

[mysqld] 
explicit_defaults_for_timestamp=true 

重启MySQL后错误消失,这时TIMESTAMP的行为如下:

■TIMESTAMP如果没有显示声明NOT NULL,是允许NULL值的,可以直接设置改列为NULL,而没有默认填充行为。
■TIMESTAMP不会默认分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP属性。

TIMESTAMP 不设置是否为NULL

■声明为NOT NULL且没有默认子句的TIMESTAMP列是没有默认值的。往数据表中插入列,又没有给TIMESTAMP列赋值时,如果是严格SQL模式,会抛出一个错误,如果严格SQL模式没有启用,该列会赋值为'0000-00-00 00:00:00′,同时出现一个警告。(这和MySQL处理其他时间类型数据一样,如DATETIME)

TIMESTAMP 默认设置为NOT NULL

Note:

以上内容和存储引擎选择无关。

到此这篇关于MySQL5.6中TIMESTAMP的变化分析就介绍到这了。这一年吃的苦承受的压力,全都很值得。不过也逼自己看到了自己的弱点,已经损失了三年,要珍惜为自己争取来的两年。更多相关MySQL5.6中TIMESTAMP的变化分析内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!

您可能有感兴趣的文章
通过实例解析MySql CURRENT_TIMESTAMP函数

mysql 创建当前时间

mysql 查询某个时间段的数据

SQL计算timestamp的差值的方法

MySQLtimestamp的类型与时区实例详解