2015-04-18 118 views
2

我一直在遇到问题。MySql比较返回NULL

有人能解释为什么

SELECT (null <> 'TEST STRING') 

SELECT (null != 'TEST STRING') 

返回NULL一个布尔值,而不是真正的你所期望的?

我不是在寻找解决方案,而是为了解释为什么SQL的行为如此。

无论使用何种语言返回布尔值,您都会期望进行任何比较。

+0

我不明白为什么这将有助于编写mysql的行为的完全 – Mazzy

+0

为什么你会比较字符串与NULL? –

+0

这可能是你的兴趣:http://stackoverflow.com/q/16234854/3132718 –

回答

2

算术比较。所以当你使用NULL进行arithemetic操作时,如<>!=,它会给你一个空值(一个毫无意义的值)作为布尔值。

可以参考MySQL来解释MySQL如何在NULL中工作。

另请注意,在MySql中NULL是特殊的,这意味着unknown的值,而在编程时它的意思是undefined value

2

您不能使用算术比较运算符(如=,<或<>)来测试NULL。 https://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

因为与NULL任何算术比较的结果也 NULL,则无法获得这种比较的任何有意义的结果。

在MySQL中,0或NULL表示错误,其他都表示为真。从布尔运算的 默认真值是1。

您可以使用is nullis not null比较不能用NULL操作进行

mysql> select 'TEST STRING' is not null; 
+---------------------------+ 
| 'TEST STRING' is not null | 
+---------------------------+ 
|       1 | 
+---------------------------+ 
+0

我不想检查一个值是否为NULL,我想检查x是不是y ,如果x为空,y是一个字符串,为什么它返回null而不是布尔值? – Mazzy

+2

那不是问题。请仔细阅读! –