在 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()执行函数时不会抛出任何异常。