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 特定的)并且问题消失了。
我们在生产中有 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 特定的)并且问题消失了。