4

当我尝试在将 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

除非我弄错了,否则这对我来说是正确的语法。

我查看了有关此问题的其他线程(翻转布尔值),例如此处。

有什么更好的方法来实现这一点?

4

2 回答 2

4

这行得通吗:

UPDATE calls set ended = !ended WHERE incoming_Cid = '1234567890';
于 2013-08-08T18:27:24.913 回答
3

您的值很可能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

行立即开始更改。

于 2013-08-08T18:45:56.760 回答