timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP在一台机器上可以为null,但在另一台机器上不能为空?

Rya*_*yan 12 mysql

我有一个MySql表,其字段定义为:

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

在我的本地机器上,我可以运行:

INSERT INTO mytbl (id, user_id, created) VALUES(88882341234, 765, null);
SELECT id, user_id, created FROM mytbl WHERE id = '88882341234';
Run Code Online (Sandbox Code Playgroud)

然后'创建'将显示类似'2014-06-13 21:16:42'的内容.

但是在我的登台服务器上,如果我运行相同的查询,我会收到此错误:

Column 'created' cannot be null.
Run Code Online (Sandbox Code Playgroud)

这些表的模式是相同的(跨本地和分段),我通过mysqldump确保(在运行此测试之前克隆表).

我在两台机器上运行MySql 5.6.17.我也确保两者都有相同的sql_mode.

可能是什么问题呢?

PS对于那些不知道我为什么要将不可空字段的值设置为null的人,MySql Docs说:

此外,您可以通过为任何TIMESTAMP列分配NULL值来初始化或更新任何TIMESTAMP列,除非已使用NULL属性定义允许NULL值.

Rya*_*yan 36

我发现了问题所在.explicit_defaults_for_timestamp我的本地计算机上的MySql变量/参数为OFF,但远程计算机上为ON.

我访问了我的AWS RDS参数组页面,并将explicit_defaults_for_timestamp从1更改为0.然后,我转到AWS RDS实例页面,观察"参数组"何时从"正在应用"更改为"挂起重启".然后我重新启动了特定的实例.

这些链接帮助我:

  • 感谢您发布更新.我们可能花了很多年才找到问题! (2认同)