“错误 1067 (42000):'created_at' 的默认值无效”解释
尝试通过添加新表来修改表时列中,您可能会遇到错误:“ERROR 1067 (42000): ‘created_at’的默认值无效。”这个错误似乎违反直觉,因为您没有更改“created_at”列本身。
根本原因
问题源于称为 SQL 模式的 MySQL 配置设置。具体来说,是“NO_ZERO_IN_DATE”和“NO_ZERO_DATE”SQL 模式。这些模式将默认日期和时间戳值限制为同时包含日期和时间部分,不允许时间部分为“00:00:00”的值。
创建新表时,它会继承 SQL 模式创建时处于活动状态。在启用这些 SQL 模式的情况下,它会影响时间戳列(如“created_at”)的默认值。在激活这些 SQL 模式的情况下向表中添加新列会尝试覆盖“created_at”的现有默认值,这是不允许的。
解决方案
要解决对于此问题,您可以通过运行以下命令来识别活动的 SQL 模式:
show variables like 'sql_mode' ;
如果存在“NO_ZERO_IN_DATE”和“NO_ZERO_DATE”SQL模式,您可以通过设置SQL模式来禁用它们以消除这些限制。您可以使用以下命令以 root 用户身份全局执行此操作:
set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
对 SQL 模式进行必要的更改后,您应该能够添加新列而不会遇到错误。
以上是为什么在 MySQL 中添加列时出现'ERROR 1067 (42000): Invalid Default Value for 'created_at'”?的详细内容。更多信息请关注PHP中文网其他相关文章!