業務需在 SQL Server 建唯一索引,發現不允許多個 NULL,報錯 重復的鍵值為 (<NULL>)。而 MySQL InnoDB 允許多 NULL,Oracle 亦同。
| 數據庫 | 唯一索引允許多 NULL | 主鍵允許 NULL |
|---|---|---|
| MySQL (InnoDB) | ✅ 是 | ❌ 否 |
| Oracle | ✅ 是 | ❌ 否 |
| SQL Server | ❌ 否(視為重複) | ❌ 否 |
SQL 標準:NULL ≠ NULL,比較結果為 UNKNOWN。因此多 NULL 不違反唯一約束,MySQL/Oracle 符合邏輯自洽。SQL Server 將 NULL 視為相等值,屬於實現差異。
CREATE UNIQUE INDEX idx ON tbl(col) WHERE col IS NOT NULL;