Oracle 中 空字符串 '' 等同於 NULL,這與 SQL 標準及其他數據庫 (MySQL/PostgreSQL/SQL Server) 不同。
| 表達式 | 結果 | 說明 |
|---|---|---|
A = '' | UNKNOWN (當作 NULL) | 空字符串視為 NULL |
A != '' / A <> '' | UNKNOWN | 同上,無法匹配任何行 |
A = ' ' | TRUE/FALSE | 比較單個空格字符 (ASCII 32) |
A IS NULL | TRUE/FALSE | 標準 NULL 判斷 |
A IS NOT NULL | TRUE/FALSE | 非空判斷 |
-- 錯誤:想查找非空字符串
SELECT * FROM t WHERE col <> ''; -- 永遠返回 0 行!
-- 正確:查找非 NULL
SELECT * FROM t WHERE col IS NOT NULL;
-- 正確:查找非空字符串且非空格 (業務常見)
SELECT * FROM t WHERE col IS NOT NULL AND col != ' ';
NULL + 任何值 = NULL,NULL || 'abc' = NULL (Oracle 連接符)。NULLS FIRST / NULLS LAST 顯式控制。NVL(col, 'default') / COALESCE(col, 'default') 處理顯示。從 MySQL/SQL Server 遷移到 Oracle 時,**務必全局搜尋替換** '' 相關條件,否則業務邏輯將錯誤。