Php mysql中的select查询始终返回空结果

Php mysql中的select查询始终返回空结果,php,mysql,sql,Php,Mysql,Sql,我使用PHP和phpMyAdmin运行此简单查询: SELECT * FROM `rdm_order` WHERE `aff_result` != "xyc" 我查过了。表、列和行不存在 但是查询返回空结果 aff\u result是以下格式:VARCHAR(10)校对utf8\u波斯语\u ci 看来一切都是对的。怎么了 Server: Localhost via UNIX socket Server type: MySQL Server version: 5.7.17-0ubuntu0.1

我使用PHP和phpMyAdmin运行此简单查询:

SELECT * FROM `rdm_order` WHERE `aff_result` != "xyc"
我查过了。表、列和行不存在

但是查询返回空结果

aff\u result
是以下格式:
VARCHAR(10)校对utf8\u波斯语\u 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


这是因为值是
NULL
<
=
无法捕获code>NULL
=比较。请改用以下方法:

SELECT   * 
FROM     `rdm_order` 
WHERE    `aff_result` != 'xyc'
OR       `aff_result` IS NULL

使用
NULL
-安全比较运算符:

SELECT *
FROM `rdm_order`
WHERE not `aff_result` <=> 'xyc';
选择*
从'rdm_订单`
其中不是'aff_result''xyc';

ANSI标准运算符is
不同于

如果您没有任何好的理由将
aff_结果的默认值设置为NULL,则可以使用mysql alter命令修改
aff_结果
列并将默认值设置为“”(空白字符串),您的查询将返回预期的结果集。
正如@Siyual所解释的,NULL不能被=或!=捕获比较。

在where子句中使用OR运算符不利于索引。

表中的所有
aff_result
值都是
xyc
NULL
NULL@HoneyBadger我做到了。同样的结果,不起作用。该查询适用于文本和int类型。但不适用于varchar。这不适用于
varchar()
?这真的很奇怪。如果你能告诉我反对投票的理由,我会非常感激的。