2016-01-06 62 views
-2

MySQLi沒有將NULL作爲空白值進行比較。mysql沒有將NULL作爲空白值進行比較

在我的情況:

if($Id == 1) { 
    $cond = " AND my_field != '' "; 
} elseif ($Id == 2){ 
    $cond = " AND my_field = '' "; 
} 

當執行在WHERE條件的結果集具有!=''一個MySQL說法是不完全相反的結果集具有WHERE條件=''。 和這裏!=''聲明完美地工作正常。

但是,當我把這個條件在elseif它工作正常。

elseif ($Id == 2){ 
    $cond = " AND my_field IS NULL "; 
} 
+0

解決方案: ** NULL。每一次。** 任何與NULL,甚至本身進行比較的結果始終爲NULL。與NULL的比較永遠不會是真或假。由於NULL永遠不可能等於任何值,因此它永遠也不會是不相等的。 –

回答

0

實際上,查詢沒有返回正確的結果集的原因是它將''與存儲在數據庫中的NULL進行比較。但是,在MySQL中與NULL的任何比較都會返回NULL,這既不是真也是假。因此,無論使用哪種運算符(即=或!=),它總是會丟棄NULL值的記錄。

檢查這個查詢,你就能理解得更清楚

SELECT 0 IS NULL , 0 IS NOT NULL , '' IS NULL , '' IS NOT NULL, NULL != NULL, NULL = NULL, NULL != '', NULL = ''

+0

感謝您的解決方案,這意味着NULL作爲'三值邏輯'工作https://en.wikipedia.org/wiki/Three-valued_logic –

+0

是的,你有它對。希望你現在不會在MySQL中遇到NULL的問題。 –

6

NULL與MySQL中的空字符串不同。嘗試

"AND (orders.user_id = '' OR orders.user_id IS NULL)" 
+0

然後,爲什麼它使用!='' –

+1

因爲你正在尋找一個值不包含NULL的值。 – aynber

0

null是在一般的SQL特殊情況下的值,你不能比較NULL這樣id=null , id != nullid is null , id is not null你可以對這些一看:

http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html

http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html

+0

是的,正是我所問的。 如果它的工作**!=''**那麼爲什麼它不能與** =''** 和這是相同的情況下, 我有解決方案,如果我把** IS NULL **&* *不是NULL **將工作,謝謝:) –