我最近把我的SQL数据库迁移到了另一个Amazon RDS 5.7版本的服务器。
在此之前,应用程序一切正常,但现在我开始记录错误:
"ER_BAD_NULL_ERROR:列xyz不能为空" - 该列已经有默认值CURRENT_TIMESTAMP
我在网上查过,人们建议将sql_mode
设置为NO_ENGINE_SUBSTITUTION
我检查了现有的设置,这个也是默认设置。
我得到这个错误的其他原因是什么?有什么诀窍吗?
谢谢。
我最近把我的SQL数据库迁移到了另一个Amazon RDS 5.7版本的服务器。
在此之前,应用程序一切正常,但现在我开始记录错误:
"ER_BAD_NULL_ERROR:列xyz不能为空" - 该列已经有默认值CURRENT_TIMESTAMP
我在网上查过,人们建议将sql_mode
设置为NO_ENGINE_SUBSTITUTION
我检查了现有的设置,这个也是默认设置。
我得到这个错误的其他原因是什么?有什么诀窍吗?
谢谢。
只需停用explicit_defaults_for_timestamp
SET GLOBAL explicit_defaults_for_timestamp = 0;
我不知道为什么在这种特定情况下它会像那样工作,所以我会集中精力解决问题。
根据文档所述,在应用程序运行期间,NO_ENGINE_SUBSTITUTION
与错误无关。我将选择具有NULL
值的“xyz”列的行并将其更新为非null
的内容。
当创建行时应用Default
。假设您有一个具有数百万行的表,并且希望添加不为空的列。这将使您的表在相当长的时间内被阻塞。因此,您可以创建没有非空但具有默认值的列。该操作仅涉及元数据,因此速度很快。Default
将处理所有新行。之后,您可以慢慢更新所有行。最后,可以添加非空约束。不确定添加约束时DB是否检查约束。或者也许先前的版本存在此问题?在MySQL中,像这样的情况是时有发生的。