在 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+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.