首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL `<=>` 安全等於運算符:NULL 值比較的正確姿勢

     編輯:MySQL 資料庫相關知識

解決 `NULL = NULL` 不為真的邏輯難題

標準 SQL 中 `NULL` 代表「未知」,任何與 `NULL` 比較 (含 `NULL = NULL`) 結果均為 `NULL` (視為 false)。MySQL 提供 `<=>` (Null-safe equal) 運算符專門處理此場景。

行為對比

運算式結果說明
`'a' <=> 'a'`1 (true)同常規 `=`
`'a' <=> 'b'`0 (false)同常規 `=`
`'a' <=> NULL`0 (false)`'a' = NULL` → NULL
`NULL <=> NULL`1 (true)`NULL = NULL` → NULL

應用場景

  • 參數化查詢中,佔位符可能為具體值或 `NULL`:`WHERE col <=> ?` 可統一處理,無需動態拼接 `IS NULL`/`=`。
  • 聯接條件包含可為 NULL 的欄位:`ON t1.a <=> t2.a`。

可移植性替代方案

`<=>` 為 MySQL 專有。跨資料庫請使用 ANSI 標準:

-- 等價轉換
col <=> val   →   (col = val OR (col IS NULL AND val IS NULL))
col IS NULL   →   col <=> NULL
col IS NOT NULL →   NOT (col <=> NULL)

總結

在 MySQL 專用項目中,`<=>` 簡化 NULL 比較邏輯;追求可移植性時,請改寫為標準 `IS NULL`/`IS NOT NULL` 或 `OR` 組合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved