php - 使用默认值将 NULL 插入 NOT NULL 列

标签 php mysql doctrine-orm zend-framework2 default-value

作为背景知识,我们在工作中使用了 Zend Framework 2Doctrine。 Doctrine 总是会为我们自己不填充的值插入 NULL。通常这是可以的,因为如果该字段具有默认值,那么它应该使用该默认值填充该字段。

对于我们运行 MySQL 5.6.16 的服务器之一,如下所示的查询运行并执行良好。虽然 NULL 被插入到一个不可为 null 的字段中,但 MySQL 会在插入时使用其默认值填充该字段。

在我们另一台运行 MySQL 5.6.20 的服务器上,我们运行下面的查询,但它失败了,因为它提示“field_with_default_value”不能为空。

INSERT INTO table_name(id, field, field_with_default_value) 
VALUES(id_value, field_value, NULL);

Doctrine 本身不支持将“DEFAULT”传递到它构建的查询中,因此这不是一个选项。我想这一定是某种 MySQL 服务器,好像它在一个版本中工作正常但在另一个版本中却不行,但不幸的是我不知道这可能是什么。我们的 SQL 模式在两台服务器上也是相同的 ('NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION')。

我应该提一下,如果我真的在 Workbench 中运行上面的 SQL,它仍然不会以同样的方式工作。所以这不是真正的 Doctrine 问题,但绝对是某种 MySQL 问题。

如有任何帮助,我们将不胜感激。

最佳答案

我在升级 MySQL 后遇到了同样的问题。原来有一个设置允许对 NOT NULL 时间戳字段进行 NULL 插入并获取默认值。

explicit_defaults_for_timestamp=0

这记录在 https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp

关于php - 使用默认值将 NULL 插入 NOT NULL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023246/

相关文章:

php - 使用 android volley 和 php 将波斯语值发布到 mysql

php - 元音符号不会保存在 mysql 中

mysql - 如何每天清理MySQL数据库

php - 使用查询构建器创建子查询

php - 存储库删除查询后,Symfony ElasticSearch不同步

orm - 在 Symfony2 中无损地删除实体

php - 从 PHP 比较 MySQL 密码

php - 在独立的非 Laravel 应用程序中照亮验证器

java - 使用外部文件的空指针异常

mysql - 当我刷新浏览器时,在 mysql 中上传表单重复文件