我一直在遇到问题。MySql比较返回NULL
有人能解释为什么
SELECT (null <> 'TEST STRING')
和
SELECT (null != 'TEST STRING')
返回NULL一个布尔值,而不是真正的你所期望的?
我不是在寻找解决方案,而是为了解释为什么SQL的行为如此。
无论使用何种语言返回布尔值,您都会期望进行任何比较。
我一直在遇到问题。MySql比较返回NULL
有人能解释为什么
SELECT (null <> 'TEST STRING')
和
SELECT (null != 'TEST STRING')
返回NULL一个布尔值,而不是真正的你所期望的?
我不是在寻找解决方案,而是为了解释为什么SQL的行为如此。
无论使用何种语言返回布尔值,您都会期望进行任何比较。
算术比较。所以当你使用NULL进行arithemetic操作时,如<>
和!=
,它会给你一个空值(一个毫无意义的值)作为布尔值。
可以参考MySQL来解释MySQL如何在NULL中工作。
另请注意,在MySql中NULL是特殊的,这意味着unknown
的值,而在编程时它的意思是undefined value
。
您不能使用算术比较运算符(如=,<或<>)来测试NULL。 https://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
因为与NULL任何算术比较的结果也 NULL,则无法获得这种比较的任何有意义的结果。
在MySQL中,0或NULL表示错误,其他都表示为真。从布尔运算的 默认真值是1。
您可以使用is null
或is not null
比较不能用NULL操作进行
mysql> select 'TEST STRING' is not null;
+---------------------------+
| 'TEST STRING' is not null |
+---------------------------+
| 1 |
+---------------------------+
我不想检查一个值是否为NULL,我想检查x是不是y ,如果x为空,y是一个字符串,为什么它返回null而不是布尔值? – Mazzy
那不是问题。请仔细阅读! –
我不明白为什么这将有助于编写mysql的行为的完全 – Mazzy
为什么你会比较字符串与NULL? –
这可能是你的兴趣:http://stackoverflow.com/q/16234854/3132718 –