| 場景 | SQL Server | Oracle |
|---|---|---|
INSERT INTO t(c) VALUES ('') 空字符串 | 存入空字符串 '',不等於 NULL | 空字符串 等同於 NULL |
| NOT NULL 列插入空字符串 | 允許(視為有值) | 報錯 ORA-01400(視為 NULL 違約) |
| INT 列插入空字符串 | 隱式轉為 0 | 報錯類型不匹配 |
SQL Server 區分 NULL(未知) 與 空字符串(已知的零長度);Oracle 遵循 ANSI 標準早期實現,將零長度字符串視為 NULL。此差異導致跨平台腳本、聯調測試頻發「空值陷阱」。
DEFAULT '' 或 DEFAULT NULL,避免隱式行為。VALUES ('') 寫法。IS NULL / IS NOT NULL,避免 = ''。設計同時支援 SQL Server/Oracle 的系統時,將「空值處理」列為專項測試用例,納入回歸集,避免上線後陷入「一個接一個的噩夢」。