我使用PHP和phpMyAdmin运行这个简单的查询:
SELECT * FROM `rdm_order` WHERE `aff_result` != "xyc"
我检查了一下。表,列和行都存在。
但查询返回空结果。
aff_result
的格式为:VARCHAR(10) COLLATE utf8_persian_ci
似乎一切都是正确的。怎么了?
Server: Localhost via UNIX socket
Server type: MySQL
Server version: 5.7.17-0ubuntu0.16.04.1-log - (Ubuntu)
Protocol version: 10
Server charset: UTF-8 Unicode (utf8)
Apache/2.4.25 (Unix) OpenSSL/1.0.2g
Database client version: libmysql - mysqlnd 5.0.12-dev
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation
PHP version: 7.0.16
答案 0 :(得分:2)
因为值为NULL
。 NULL
或=
比较无法捕获!=
。请改用以下内容:
SELECT *
FROM `rdm_order`
WHERE `aff_result` != 'xyc'
OR `aff_result` IS NULL
答案 1 :(得分:0)
使用NULL
- 安全比较运算符:
SELECT *
FROM `rdm_order`
WHERE not `aff_result` <=> 'xyc';
ANSI标准运算符为is distinct from
。
答案 2 :(得分:-1)
如果没有任何合理的理由将aff_result
的默认值设置为NULL,则可以使用mysql alter命令修改aff_result
列并将默认值设置为''(空字符串)您的查询将返回预期的结果集
正如@Siyual所解释的那样,= =或!=比较无法捕获NULL
并且在where子句中使用OR运算符不是索引友好的。