本文概述
- A.逻辑解决方案
- B.服务器端解决方案
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。
【如何解决MySQL异常SQLSTATE [HY000](常规错误:1364字段” field_name” 没有默认值)】编码愉快!
推荐阅读
- 如何解决(解决方案)Google的”程序员”游戏(海龟级)
- 如何在CentOS中安装bcmath扩展
- 如何使用EventListener根据用户在Symfony 2.8中的角色将用户重定向到特定页面
- 如何在Symfony 3.4中使用MonologBu??ndle通过电子邮件自动报告异常
- 我应该使用’#’还是’javascript(void(0);’在我的空链接的href属性上)
- 如何在Symfony 1.4中检索当前模块的名称
- 如何摆脱PHP警告(json_encode()期望参数2长,给定字符串)
- 如何在PHP中按键对关联数组进行分组
- 如何在Symfony 1.4中通过HTTPS(HTTP over SSL)强制全局访问