我有一个MySql表,其字段定义为:
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
在本地计算机上,我可以运行:
INSERT INTO mytbl (id, user_id, created) VALUES(88882341234, 765, null);
SELECT id, user_id, created FROM mytbl WHERE id = '88882341234';
然后“创建”将显示类似“ 2014-06-13 21:16:42”的内容。
但是在我的登台服务器上,如果我运行相同的查询,则会收到此错误:
Column 'created' cannot be null.
这些表的模式是相同的(在本地和暂存中),这是我通过mysqldump(在运行此测试之前克隆表)确保的。
我在两台计算机上都运行MySql 5.6.17。我还确保两者都具有相同的sql_mode。
可能是什么问题呢?
PS对于不知道为何将非空字段的值设置为null的人,MySql Docs会说:
此外,除非已使用NULL属性将其定义为允许NULL值,否则可以通过为它分配NULL值来将任何TIMESTAMP列初始化或更新为当前日期和时间。
我发现了问题所在。MySql变量/参数explicit_defaults_for_timestamp
在本地计算机上为OFF,但在远程计算机上为ON。
我访问了我的AWS RDS参数组页面,并将explicit_defaults_for_timestamp从1更改为0。然后我去了AWS RDS实例页面,以查看“参数组”从“正在应用”更改为“待重启”的情况。然后,我重新启动了特定实例。
这些链接帮助我:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句