1 问题重现

在Windows环境下安装MySQL,配置服务的时候出现的问题:

D:\All\MySQL\mysql-5.6.44-winx64\bin>mysqld --initialize
2019-07-01 19:16:13 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-07-01 19:16:13 0 [Note] mysqld (mysqld 5.6.44) starting as process 14996 ...

D:\All\MySQL\mysql-5.6.44-winx64\bin>

2 解决办法

在配置文件中加入:

[mysqld]
# explicit_defaults_for_timestamp
explicit_defaults_for_timestamp=true

3 问题说明

MySQL5.6.6以前:

如果timestamp类型的列指定值为null,默认为当前timestamp。

如果timestamp类型的列没有指定值为null,也就是没有传值,默认为非null的一个值。

表中第一个timestamp列,如果没有指定值为null、也没有设置默认值,在插入和更新时都会设置为当前时间。

表中第一个timestamp列之后的所有timestamp列,如果没有被定义为null、定义default值,会设置为“0000-00-00 00:00:00”。

MySQL5.6.6以后,需要在配置文件里设置“explicit_defaults_for_timestamp=true”,其含义为:

如果timestamp类型的列指定值为null,默认为当前timestamp。

如果timestamp类型的列没有指定值为null,也就是没有传值,默认为null。

声明timestamp类型的列不为能为null,而且没有指定默认值。在插入时timestamp类型的列没有指定值,如果是严格sql模式,会抛出一个错误,如果严格sql模式没有启用,该列会赋值为‘0000-00-00 00:00:00’,同时出现警告。


版权声明:本文为zhibiweilai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zhibiweilai/article/details/122199352