Mysql 5.5.54 在具有多列的唯一键上重复输入

Mysql 5.5.54 Duplicate entry on unique key with multiple columns

我们在生产中有 table(我在本地尝试做同样的事情,一切都按预期工作,也许我有更新的数据库版本)。

Table 包含很多列,其中两列是数字和年份。这些列与唯一约束键绑定。

当我查询时

SELECT * FROM `order` WHERE number IS NULL  AND YEAR = 2018

我得到不止一行。这并不重要,它是正确的。 [例如,我可以有 100 行 null,例如 2018] 但是当我尝试插入 number = null 和 year = 2018 的新记录时。我收到诸如

之类的错误
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2018' for key 'number_year_UNIQUE'

想到的一件事是 mysql 中的 null 与随机数隐藏绑定,当我尝试插入它时,它以某种方式成为新记录的重复项。

额外信息是:我们使用 Yii1,通过 ActiveRecord 出现错误。

编辑

在建议添加分析后得到绑定参数

他们如下

:yp13='2018', 
:yp14='', 

本地机器上的参数完全相同。

编辑

您是否尝试过 运行 来自 sql 控制台(PhpMyAdmin 或类似工具)的插入查询?

我怀疑这是 php 方面的问题,例如您传递空值的方式。

问题在于我试图插入空字符串 '' 而不是空值,如上所述(如屏幕截图所示)。 在代码中我有类似

$order = new Order();
//some other stuff
$order->number = null;
$order->save();

但是在rules中(在新增的验证方法中,number变成了空串) 添加了场景(Yii 特定的)并且问题消失了。