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

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

为了理解这一点,在 create 命令的帮助下创建了一个表,如下所示 -

mysql> CREATE table DemoEmptyAndNULL
-> (
-> Message varchar(100)
-> );

成功创建表后,在插入命令的帮助下将一条空记录插入表中,如下所示 -

mysql> INSERT into DemoEmptyAndNULL values(' ');

插入记录后,我们可以在 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的长度。首先,使用删除命令删除插入表中的记录,如下所示 -

mysql> delete from DemoEmptyAndNULL where message=' ';

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

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

现在,具有空值的记录被插入到表中,如下所示 -

mysql> INSERT into DemoEmptyAndNULL values();

使用 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 值会强制系统做额外的工作并且不会提供您正在寻找的数据。但是,NULL 在count()执行函数时不会抛出任何异常。