我有一个最奇怪的问题 - 当我跑:
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子句。
答案 0 :(得分:3)
translation
是not null
,默认值为''
吗?如果是这样,将NULL
设置为UPDATE
无效,并且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 |
+---------+------+-------------------------------------+
答案 1 :(得分:3)
好的,试试这个:
UPDATE words SET translation='$$$' WHERE translation = '';
UPDATE words SET translation=NULL WHERE translation = '$$$';
其次;也许列定义不允许NULL值?检查表设计。
答案 2 :(得分:0)
我敢打赌,您不允许translation
列为NULL
。它会返回
Error Code: 1048
Column 'translation` cannot be null
执行语句时?
答案 3 :(得分:0)
我认为翻译允许null,如果是os尝试这个
UPDATE `words` SET `translation`= NULL WHERE `translation IS NULL.
答案 4 :(得分:-1)
尝试使用ID或其他类似的其他列
update 'words' set 'translation'=null where id in (select id from 'words' where 'translation'=''
不知道为什么会这样。