我们有生产中的表(在本地我尝试做同样的事情,一切都按预期工作,也许我有更新的数据库版本)。
表包含许多列,其中两列是数字和年份。这些列使用唯一约束键绑定。
当我查询
时return_value
我得到的不止一行。它并不重要,这是正确的。 [我可以有100行null,例如2018] 但是当我尝试插入number = null和year = 2018的新记录时,我收到错误,例如
SELECT * FROM `order` WHERE number IS NULL AND YEAR = 2018
有一点需要注意的是,mysql中的null隐藏着随机数,当我尝试插入它时,它会以某种方式变成新记录的副本。
由于额外信息是:我们使用Yii1并通过ActiveRecord显示错误。
修改
在建议之后添加分析得到了绑定参数
他们如下
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2018' for key 'number_year_UNIQUE'
本地计算机上的参数完全相同。
修改
答案 0 :(得分:1)
你试过从sql console(PhpMyAdmin或类似的)运行插入查询吗?
我怀疑它在php方面的问题就像传递空值的方式一样。
答案 1 :(得分:0)
问题在于我尝试插入空字符串''不是空值,如上所述(见截图)。 在代码中我有类似
的东西$order = new Order();
//some other stuff
$order->number = null;
$order->save();
但是,在规则中(在新添加的验证方法中,数字变为空字符串) 添加方案(Yii特定)和问题已经消失。