必须用is null判断null,因null是未知状态,= null恒返回unknown而被where过滤;is null可走索引,需区分null与'',并用hex或length验证真实值。
查不到 null 数据,大概率是因为用了 = null 或 != null 这类写法——它们永远不返回任何行,不是 phpmyadmin 的问题,而是 sql 标准行为。
为什么 = NULL 查不到任何结果?
MySQL(以及所有遵循 SQL 标准的数据库)中,NULL 表示“未知值”,而任何与 NULL 的等值比较(包括 =、!=、、<code>>)结果都是 UNKNOWN,在 WHERE 子句中会被当作 FALSE 处理。
常见错误示例:
-
SELECT * FROM users WHERE phone = NULL;→ 永远空结果 -
SELECT * FROM products WHERE price != NULL;→ 同样空结果 - 即使字段确实存了
NULL,这些语句也匹配不上
正确查询 NULL 的两种方式
必须用专门设计的 NULL 判断语法,phpMyAdmin 完全支持,且和命令行 MySQL 行为一致:
-
IS NULL:只匹配真正为NULL的行SELECT * FROM users WHERE phone IS NULL; -
IS NOT NULL:排除NULL,只取有值的行SELECT * FROM products WHERE price IS NOT NULL; - MySQL 特有但不推荐日常使用:
(NULL-safe equal),例如WHERE commission NULL等价于IS NULL,但它会掩盖类型隐式转换风险
为什么有些“看起来是 NULL”的数据查不出来?
你看到单元格显示 NULL,不代表它真是 SQL NULL。常见干扰项:
- 字段存的是空字符串
'',不是NULL—— 用LENGTH(col)或HEX(col)验证:SELECT HEX(phone) FROM users WHERE id = 1;若返回2727(两个单引号)或空字符串的十六进制,就不是NULL - TINYINT(1) 字段值为
0,界面可能渲染成类似NULL的灰调,但它是数字0,不是NULL - phpMyAdmin 的“空值显示为”设置(
$cfg['ReplaceNulls'])把NULL渲染成破折号—或空格,容易误判;真要确认,右键单元格 → “检查元素”,看是否带class="null"
在 phpMyAdmin SQL 标签页里验证最可靠
别依赖浏览视图的显示,直接在 SQL 标签页执行诊断语句:
- 查字段是否真为
NULL:SELECT id, phone, phone IS NULL AS is_null_flag FROM users LIMIT 10; - 统计分布:
SELECT COUNT(*) AS total, COUNT(phone) AS non_null_count, COUNT(*) - COUNT(phone) AS null_count FROM users; - 混合排查:
SELECT id, phone, LENGTH(phone), HEX(phone) FROM users WHERE phone IS NULL OR phone = '' LIMIT 5;
真正容易被忽略的是:phpMyAdmin 不修改 SQL 语义,它只是执行你写的语句。所谓“查询结果不正确”,几乎全是条件写法或数据本质理解偏差导致的——先确认数据是不是真的 NULL,再确认你用的是否是 IS NULL。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











