📌  相关文章
📜  #1067 - 'updated_at' 的默认值无效 (1)

📅  最后修改于: 2023-12-03 14:38:43.553000             🧑  作者: Mango

关于MySQL错误#1067 - 'updated_at'的默认值无效

MySQL错误代码#1067是指在尝试向表中插入或更新数据时,MySQL服务器无法通过默认值来设置表中的某一列。在这种情况下,MySQL服务器将返回错误#1067,并指出哪一列引起了问题。

常见原因
  1. 数据类型不匹配:例如,您指定某个列的默认值为日期,但实际上您尝试向该列中插入一个字符串或整数。
  2. 空值约束:表定义了该列不能为空,但您尝试提交一个空值。
  3. 其他约束:例如,您可能设置了一个唯一键或主键,但尝试撞击了现有的值。
  4. MySQL版本:某些版本的MySQL可能会导致这个错误,特别是在使用ONLY_FULL_GROUP_BY模式的情况下。
解决方案
  1. 检查默认值:确认您设置的默认值与列的数据类型匹配,并且没有任何空格或拼写错误。可以使用DESCRIBE语句查看列的定义。

    DESCRIBE table_name;
    
  2. 检查空值约束:如果您正在提交空值,请确保该列定义为空值。否则,您可能需要设置一个默认值,或在代码中检查空值并通过替代值代替它。

  3. 检查其他约束:检查表定义,确认您没有试图插入一个与现有值冲突的值。如果这是唯一键或主键,您需要确保值的唯一性。

  4. 禁用ONLY_FULL_GROUP_BY:如果您在MySQL 5.7.5或更新版本中运行,并启用了ONLY_FULL_GROUP_BY模式,请考虑禁用它。您可以使用以下语句查看模式是否启用。

    SELECT @@GLOBAL.sql_mode;
    

    然后,您可以在MySQL配置文件中将其禁用(例如,my.cnf或my.ini)。在[mysqld]部分中添加以下行:

    sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    

    请注意,根据您的MySQL版本和配置,其他模式可能会影响结果。要禁用ONLY_FULL_GROUP_BY模式,您需要删除sql_mode变量的ONLY_FULL_GROUP_BY部分。

结论

MySQL错误#1067可能是由多种原因引起的,包括不匹配的数据类型,空值约束,其他约束和MySQL版本。通过检查默认值,空值约束,其他约束和禁用ONLY_FULL_GROUP_BY模式,可以尝试解决这个问题。如果问题仍然存在,请尝试联系MySQL支持或在MySQL社区论坛上发表问题,并包含所有相关信息和错误消息。