MySQL NULL 值处理

NULL 的三值逻辑:不能用 = 比较,要用 IS NULL。

Beginner
Key PointsNULL 表示「未知」,任何与 NULL 的比较结果都是 UNKNOWN,既非真也非假。

正确判断 NULL

SQL
SELECT * FROM users WHERE age IS NULL;      -- 对
SELECT * FROM users WHERE age = NULL;       -- 错,永远不成立
SELECT * FROM users WHERE age IS NOT NULL;
Output
+----+----------+------+
| id | username | age  |
+----+----------+------+
|  5 | erin     | NULL |
+----+----------+------+

NULL 参与运算

SQL
SELECT 1 + NULL, NULL = NULL, NULL <> NULL;
Output
+----------+-------------+--------------+
| 1 + NULL | NULL = NULL | NULL <> NULL |
+----------+-------------+--------------+
|     NULL |        NULL |         NULL |
+----------+-------------+--------------+
NULL = NULL returns NULL, not true, so two NULLs are not treated as equal in DISTINCT/joins. Use IFNULL(col,0) or COALESCE(col,0) to treat NULL as a value.

Friends & Partners