我注意到 MySQL 中有一些奇怪的东西,我想看看为什么它会这样,是否有办法改变它?
场景
我的帐户 InnoDB 表包含以下列 id, name, type
,其中类型可以为 null。
现在,假设我有 10 条记录类型 = "TEST"和 100 条记录 type IS NULL
和 20 条记录类型 = "STANDARD"
如果我运行这个查询
SELECT * FROM accounts WHERE type <> "TEST"
此查询只会向我显示 type = "STANDARD"的 20 条记录,它会忽略 100 条具有空值的记录。
要解决这个问题,我必须做这样的事情
SELECT * FROM accounts WHERE IFNULL(type,"") <> "TEST"
或
SELECT * FROM accounts WHERE (type <> "TEST" OR type IS NULL)
NULL 值表示空白“又名无值”,无值表示 <>“测试”
这可能是预期的行为,但我不确定为什么会这样设计
最佳答案
SELECT * FROM accounts WHERE type <> "TEST"
这句话的意思是,
“从帐户中选择列类型的值不等于‘TEST’的行”。
这意味着 mysql 返回类型值不等于“TEST”的记录。
这里,由于NULL表示没有值,所以不返回type列没有任何值的记录。
关于mysql - 为什么MySQL在查找不等于时会忽略空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741894/