【问题标题】:MySQL tinyint comparator returning empty setMySQL tinyint 比较器返回空集
【发布时间】:2014-01-24 10:33:58
【问题描述】:

我正在执行一个选择语句,试图查找列 inactive 未设置为 1 的数据,但结果始终为空集。为什么会这样?

 mysql> select id, time, num, inactive from data limit 10;
+--------+------------+------+----------+
| id     | time       | num  | inactive |
+--------+------------+------+----------+
| 276975 | 1388024838 |   55 |     NULL |
| 276976 | 1388025072 |  138 |     NULL |
| 276977 | 1388025435 |  211 |     NULL |
| 276978 | 1388025841 |  240 |     NULL |
| 276979 | 1388026372 |  329 |     NULL |
| 276980 | 1388026515 |  119 |     NULL |
| 276981 | 1388027029 |   57 |     NULL |
| 276982 | 1388027117 |  314 |     NULL |
| 276983 | 1388027251 |   47 |     NULL |
| 276984 | 1388027340 |   68 |     NULL |
+--------+------------+------+----------+
10 rows in set (0.00 sec)

所以我希望这会起作用,但它不会:

mysql> select id from data where inactive != 1;
Empty set (0.01 sec)

这里有更多信息:

mysql> describe data;
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| id          | bigint(20)    | NO   |     | NULL    |       |
| time        | bigint(20)    | YES  |     | NULL    |       |
| num         | int(11)       | YES  |     | NULL    |       |
| inactive    | tinyint(1)    | YES  |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+

【问题讨论】:

  • 任何涉及 NULL 的操作都返回 NULL。 NULL 不是真的。
  • 把默认值设为0怎么样?
  • @MartinSamson 我怎样才能为每一行快速做到这一点?我刚刚添加了这个专栏
  • @bvpx dev.mysql.com/doc/refman/5.1/en/alter-table.html ALTER TABLE data CHANGE `inactive` `inactive` TINYINT(1) NOT NULL DEFAULT 0;

标签: php mysql null tinyint


【解决方案1】:

NULL 不等于任何东西。您需要明确接受空值:

select id from data where inactive <>1 or inactive is null;

有关NULL 处理的更多信息,请参阅Working with NULL

【讨论】:

    【解决方案2】:

    这是因为 SQL 使用三值逻辑。 inactive != 1 不包括 NULL

    select id from data where inactive != 1 OR inactive IS NULL;
    

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2012-12-01
      • 1970-01-01
      • 2023-03-30
      • 2020-02-03
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多