在 MySQL 中插入 NULL 还是空字符串哪个更好?


在 InnoDB 中,NULL 占用的空间比空字符串小。此外,NULL 的长度为 null,而空字符串的长度为 0。

为了理解这一点,我们将使用 create 命令创建一个表,如下所示:

mysql> CREATE table DemoEmptyAndNULL
-> (
-> Message varchar(100)
-> );
Query OK, 0 rows affected (0.49 sec)

成功创建表后,我们将使用 insert 命令向表中插入一条空记录,如下所示:

mysql> INSERT into DemoEmptyAndNULL values(' ');
Query OK, 1 row affected (0.17 sec)

插入记录后,我们可以使用 select 命令显示所有记录,如下所示:

mysql> SELECT * from DemoEmptyAndNULL;

执行上述查询后,将获得以下输出:

+---------+
| Message |
+---------+
|         |
+---------+
1 row in set (0.00 sec)

使用内置函数 count 检查空字符串长度的语法如下:

select count(column_name) from yourTableName;

上述语法用于获取空字符串的长度,如下所示:

mysql> select count(message) from DemoEmptyAndNULL;

执行上述查询后,输出如下:

+----------------+
| count(message) |
+----------------+
| 1              |
+----------------+
1 row in set (0.06 sec)

从以上输出可以看出,空字符串的长度为 1。

现在我们将检查 NULL 的长度。首先,我们将使用 delete 命令删除插入到表中的记录,如下所示:

mysql> delete from DemoEmptyAndNULL where message=' ';
Query OK, 1 row affected (0.19 sec)

以下查询用于检查表中当前是否没有记录

mysql> SELECT * from DemoEmptyAndNULL;
Empty set (0.00 sec)

现在,我们将带有 null 值的记录插入到表中,如下所示:

mysql> INSERT into DemoEmptyAndNULL values();
Query OK, 1 row affected (0.18 sec)

使用 select 命令显示记录,获得的输出如下:

+---------+
| Message |
+---------+
| NULL    |
+---------+
1 row in set (0.00 sec)

现在,表中只有一条带有 null 值的记录。要查找其长度,我们将使用以下查询:

mysql> select count(message) from DemoEmptyAndNULL;

以下是上述查询的输出:

+----------------+
| count(message) |
+----------------+
| 0              |
+----------------+
1 row in set (0.00 sec)

上述输出表示 null 值的 count 为 0。

让我们检查 MySQL 版本。

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.12    |
+-----------+
1 row in set (0.06 sec)

因此,最好对数据库使用空字符串,因为允许 NULL 值会强制系统执行额外的工作,并且不会提供您正在查找的数据。但是,当执行 count() 函数时,NULL 不会抛出任何异常。

更新于:2020-06-24

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告