0

我有一个最奇怪的问题 - 当我运行时:

SELECT * FROM `words` WHERE `translation` = ''

我得到:Showing rows 0 - 29 (6,925 total, Query took 0.0008 sec)

但是当我运行时:

UPDATE `words` SET `translation`= NULL WHERE `translation`= ''

我得到:0 row(s) affected. ( Query took 0.2200 sec )

为什么它不想更新行?它是相同的 WHERE 子句。

4

5 回答 5

3

translation声明为not null,具有默认值''?如果是这样,将其设置为NULLanUPDATE无效,并且 MySQL 正确报告没有更改任何行。也就是说,你正在做相当于UPDATE words SET translation = 'a' WHERE translation = 'a'.

不过,您应该收到警告。MySQL 命令行客户端报告如下警告:

mysql> UPDATE words SET translation=NULL WHERE translation = '';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
Rows matched: 2  Changed: 0  Warnings: 2

要查看警告,请使用以下命令show warnings;

mysql> show warnings;
+---------+------+-------------------------------------+
| Level   | Code | Message                             |
+---------+------+-------------------------------------+
| Warning | 1048 | Column 'translation' cannot be null |
| Warning | 1048 | Column 'translation' cannot be null |
+---------+------+-------------------------------------+
于 2012-05-24T08:48:56.467 回答
3

好的,试试这个:

UPDATE words SET translation='$$$' WHERE translation = '';
UPDATE words SET translation=NULL WHERE translation = '$$$';

其次; 也许列定义不允许 NULL 值?检查表设计。

于 2012-05-24T08:50:02.287 回答
0

我敢打赌你不允许translationcolumn 是NULL. 是否返回

Error Code: 1048
Column 'translation` cannot be null

当你执行语句?

于 2012-05-24T08:52:45.203 回答
0

我认为翻译允许null,如果是操作系统试试这个

 UPDATE `words` SET `translation`= NULL WHERE `translation IS NULL.
于 2012-05-24T09:10:40.583 回答
-1

尝试使用其他列,例如 ID 或其他内容

update 'words' set 'translation'=null where id in (select id from 'words' where 'translation'=''

不知道为什么会这样。

于 2012-05-24T08:45:15.887 回答