个性化阅读
专注于IT技术分析

如何解决MySQL异常SQLSTATE [HY000]:常规错误:1364字段”field_name”没有默认值

本文概述

当你尝试在数据库中插入/更新一条记录时, 通常会触发一般错误1364, 在该记录中, 某个字段(即引发异常的字段)不能为null, 但是你尝试将其值设置为null(不是为它提供价值)。通常, 仅当你在严格模式下使用MySQL时才会触发此异常, 你可以通过以下查询获取MySQL服务器正在使用的模式:

SELECT @@sql_mode;

如果遇到此异常, 则可能是因为你启用了严格模式(STRICT_TRANS_TABLES)。在本文中, 我们将与你分享两种防止此异常轻易出现的方法。

A.逻辑解决方案

为防止此异常, 只需为触发异常的字段提供一个值或定义该字段可以为null, 那么当你尝试插入记录时, 该值将为null但不会引发错误, 例如列不能为null的示例, 以下查询将引发异常:

INSERT INTO user (column_a, column_b) VALUES ("Value First Column", NULL);

因此, 你可以更改列以使该列可为空:

ALTER TABLE YourTable MODIFY column_b VARCHAR(255) DEFAULT NULL;

就是这样, 该异常不应再出现。

B.服务器端解决方案

如果由于使用框架或其他类型的逻辑而无法自己定义列的值, 那么该框架或其他类型的逻辑将首先插入具有null的记录, 然后对其进行更新, 则你可以依靠简单的方法来删除严格的MySQL的。不建议这样做, 因为这样可以防止例如在不能为null的列中插入空值而引发上述异常。所有这些基本上都是作为一种控制措施, 它可以防止你的逻辑失败并阻止你编写松散的代码, 在这些地方你可能会忽略错误的书面逻辑等。

在其他情况下, 你编写的逻辑在你的本地环境中有效, 因为你可能没有在其中设置严格模式, 但是在生产服务器上, 由于该模式它不起作用。在这种情况下, 你可以禁用严格模式来修改MySQL的配置文件(在Windows中为my.ini或在Linux中为my.cnf), 将sql_mode设置为空字符串, 或者删除STRICT_TRANS_TABLES选项以将MySQL设置为”严格模式”并使用启用了NO_ENGINE_SUBSTITUTION模式:

[mysqld]
sql-mode=""
# Or
# sql-mode="NO_ENGINE_SUBSTITUTION"

保存更改, 重新启动mysql服务, 该错误将不再显示, 尽管该列不允许, 但该列将设置为null。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何解决MySQL异常SQLSTATE [HY000]:常规错误:1364字段”field_name”没有默认值

评论 抢沙发

评论前必须登录!