了解為什麼 NULL = NULL
在 SQL Server 中傳回 False
SQL Server 對 NULL
值的處理通常會導致意外結果。 =
運算子在比較可空列時傳回 <code>false</code>,因為 NULL
表示未知或缺失值。
像 WHERE
這樣的 nullParam = NULL
子句條件總是評估為 <code>false</code>。這是因為不可能明確確認兩個未知量之間的相等性。
SQL-92 標準規定了此行為:NULL = NULL
既不是 true 也不是 false;它是未定義的。
ansi_nulls
設定的影響
行為會根據 ansi_nulls
設定而顯著改變。 將 ansi_nulls
設定為 OFF
時,NULL = NULL
的計算結果令人驚訝地為 <code>true</code>。 如下圖所示:
程式碼範例:
<code class="language-sql">SET ANSI_NULLS OFF; IF NULL = NULL PRINT 'true'; ELSE PRINT 'false'; SET ANSI_NULLS ON; IF NULL = NULL PRINT 'true'; ELSE PRINT 'false';</code>
輸出:
與ansi_nulls OFF
:
<code>true</code>
與ansi_nulls ON
:
<code>false</code>
處理 NULL 的最佳實務
由於這種可變性,在使用 ansi_nulls
比較時了解 NULL
設定至關重要。 為了避免歧義,在檢查 IS NULL
值時始終使用 IS NOT NULL
和 NULL
。 無論 ansi_nulls
設定如何,這都確保了一致且可預測的行為。 這是可靠 SQL 程式碼的建議方法。
以上是為什麼 SQL Server 中「NULL = NULL」會回傳 False(以及「ansi_nulls」如何影響它)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!