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

mysqlmysqli database

在 innoDB 中,与空字符串相比,NULL 占用的空间更少。此外,NULL 长度为空,而空字符串的长度为 0。

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

mysql> CREATE table DemoEmptyAndNULL
-> (
-> Message varchar(100)
-> );
Query OK, 0 rows impacted (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 impacted (0.19 sec)

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

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

现在,将具有空值的记录插入表中,如下所示 −

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

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

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

现在,表中只有一条值为空的记录。要查找其长度,请使用以下查询 −

mysql> select count(message) from DemoEmptyAndNULL;

以下是上述查询的输出−

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

以上输出表示对于空值,计数为 0。

让我们检查一下 MySQL 版本。

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

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


相关文章