当我尝试在将 MySql 表中的布尔值实现到 ruby 脚本之前手动测试它时,我得到了匹配但没有更改:
UPDATE calls SET ended = NOT ended WHERE incoming_Cid = '1234567890';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
除非我弄错了,否则这对我来说是正确的语法。
我查看了有关此问题的其他线程(翻转布尔值),例如此处。
当我尝试在将 MySql 表中的布尔值实现到 ruby 脚本之前手动测试它时,我得到了匹配但没有更改:
UPDATE calls SET ended = NOT ended WHERE incoming_Cid = '1234567890';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
除非我弄错了,否则这对我来说是正确的语法。
我查看了有关此问题的其他线程(翻转布尔值),例如此处。
这行得通吗:
UPDATE calls set ended = !ended WHERE incoming_Cid = '1234567890';
您的值很可能ended是 SQLNULL值。空值的逻辑not仍然为空,因此数据库正确报告“没有更改”,因为中的值ended没有改变 - 它开始为空,并且仍然为空:
mysql> create table foo (x boolean);
mysql> insert into foo values (null);
Query OK, 1 row affected (0.04 sec)
mysql> update foo set x=not x;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> update foo set x=not x;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
注意Changed: 0. 但是,一旦您将 x 重置为非空值:
mysql> update foo set x=true;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update foo set x=not x;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
行立即开始更改。