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

MySQL NULL 值完整指南:與空字串差異、IS NULL、索引、排序、聚合函數、特殊型別行為

     編輯:MySQL 資料庫相關知識

NULL ≠ 空字串 ≠ 0。本文系統整理 NULL 語意、比較邏輯、IS NULL/IFNULL/COALESCE 用法、索引限制、LOAD DATA 匯入、DISTINCT/GROUP BY/ORDER BY 行為、聚合函數忽略規則、TIMESTAMP/AUTO_INCREMENT 特殊處理。

NULL vs 空字串:語意差異

INSERT INTO t (phone) VALUES (NULL);   -- 電話號碼未知
INSERT INTO t (phone) VALUES ('');     -- 確定沒有電話

正確比較與處理函數

操作正確寫法錯誤寫法
判斷是否 NULLcol IS NULLcol = NULL
判斷非 NULLcol IS NOT NULLcol != NULL
替換 NULL 為預設值IFNULL(col, 'N/A') / COALESCE(col, 'N/A')

NULL 參與運算/比較結果永遠為 NULL

SELECT NULL, 1+NULL, CONCAT('abc', NULL);
-- 結果:NULL, NULL, NULL

索引與 NULL

  • MyISAM、InnoDB、BDB、MEMORY:**允許 NULL 欄位建立索引**
  • 其他引擎:索引欄位必須 NOT NULL

LOAD DATA INFILE 匯入 NULL

  • 資料檔中用 \N(大寫 N)代表 NULL
  • 某些情況下文字 NULL 也可
  • 空值/缺漏欄位預設匯入空字串 ''

DISTINCT / GROUP BY / ORDER BY

  • 所有 NULL 視為**相等**(同一群組)
  • ORDER BY col ASC:NULL **最前**
  • ORDER BY col DESC:NULL **最後**

聚合函數對 NULL 的處理

SELECT COUNT(*), COUNT(age) FROM person;
-- COUNT(*) = 總列數, COUNT(age) = 非 NULL 年齡筆數

特殊型別的 NULL 行為

函數行為
COUNT(col)**忽略 NULL**,只計非 NULL 筆數
COUNT(*)計**所有列**(含 NULL)
SUM/AVG/MIN/MAX**忽略 NULL**

實務建議

  • ✅ 能用 NOT NULL 就加上,減少邏輯判斷複雜度
  • ✅ 統一用 COALESCE(ANSI 標準)替代 IFNULL/NVL
  • ✅ 設計報表時明確處理 NULL 顯示(如 COALESCE(col, '—'))
  • ✅ 避免在 WHERE 對 NULL 欄位做運算(WHERE col+1 > 10 永不命中 NULL 列)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
型別插入 NULL 結果
TIMESTAMP自動填入**目前日期時間**
AUTO_INCREMENT 整數欄位自動填入**下一個序號**