mysql8 null转0_处理 NULL 值

这篇博客介绍了MySQL中`NULL`值的概念和处理方式。`NULL`表示丢失的未知值,不能直接使用算术比较运算符进行测试。文章通过示例展示了如何使用`ISNULL`和`ISNOTNULL`操作符来测试`NULL`,并解释了`NULL`在`GROUP BY`和`ORDER BY`中的行为。此外,还提醒读者`0`和空字符串可以插入到`NOTNULL`列中,因为它们被视为非`NULL`的值。
摘要由CSDN通过智能技术生成

#### 3.3.4.6 处理 NULL 值

在你习惯之前, `NULL` 值可能会让你感到惊讶. 从概念上讲, `NULL` 意味着“丢失的未知值”, 它的处理方法与其他值有些不同.

对 `NULL` 进行测试, 使用 [`IS NULL`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_is-null) 和 [`IS NOT NULL`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_is-not-null) 操作符, 如下所示:

```sql

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;

+-----------+---------------+

| 1 IS NULL | 1 IS NOT NULL |

+-----------+---------------+

| 0 | 1 |

+-----------+---------------+

```

不能使用算术比较运算符, 比如 [`=`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_equal), [``](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_not-equal) 来测试 `NULL`. 演示这个, 尝试以下查询:

```sql

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;

+----------+-----------+----------+----------+

| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |

+----------+-----------+----------+----------+

| NULL | NULL | NULL | NULL |

+----------+-----------+----------+----------+

```

因为任何与 `NULL` 的算术运算符比较的结果也是 `NULL`, 所以你不能从这样的比较中获得任何有意义的结果.

在 MySQL 中, `0` 或者 `NULL` 是 false 并且其他任何值都是 true. 布尔运算默认真值为 `1`.

`NULL` 的特殊处理就是为什么在前一节中, 必须使用 `death IS NOT NULL` 而不是 `death <> NULL` 来确定哪些动物已经死亡.

在 `GROUP BY` 中, 两个 `NULL` 值就被认为是相等的.

当执行 `ORDER BY` 时, 如果你执行 `ORDER BY ... ASC`, `NULL` 值将排在首位, 如果你执行 `ORDER BY ... DESC` 将排在末尾.

在处理 `NULL` 值是, 一个常见的错误是假设不可能将 0 或者空值插入到定义为 `NOT NULL` 的列中, 但事实并非如此. 它们实际上是值, 而 `NULL` 的意思是 “没有值”. 你可以使用 `IS NOT NULL` 很容易进行测试, 如下所示:

```sql

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;

+-----------+---------------+------------+----------------+

| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |

+-----------+---------------+------------+----------------+

| 0 | 1 | 0 | 1 |

+-----------+---------------+------------+----------------+

```

因此完全有可能将0或者空字符串插入到 `NOT NULL` 列中, 因为这些列实际上是 `NOT NULL`. 参阅 [`Section B.4.4.3, “NULL 值得问题”`](https://dev.mysql.com/doc/refman/8.0/en/problems-with-null.html).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值