從本質上區別: 1、空值不占空間 2、null值占空間 通俗的講: 空值就像是一個真空轉態杯子,什麼都沒有,而null值就是一個裝滿空氣的杯子,雖然看起來都是一樣的,但是有著本質的區別。 例子: 創建一個test表,colA是不可以存放null值的,colB是能存放null值的。 1 CREATE ...
從本質上區別: 1、空值不占空間 2、null值占空間 通俗的講: 空值就像是一個真空轉態杯子,什麼都沒有,而null值就是一個裝滿空氣的杯子,雖然看起來都是一樣的,但是有著本質的區別。 例子: 創建一個test表,colA是不可以存放null值的,colB是能存放null值的。
1 CREATE TABLE `test` ( 2 `colA` varchar(255) NOT NULL, 3 `colB` varchar(255) DEFAULT NULL 4 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入一個null值試試,會發生什麼情況?
1 INSERT INTO `test`(`colA`, `colB`) VALUES (NULL, NULL);
//出現報錯,原因是colA是不能插入null值。
那麼如果兩個欄位同時插入空值,會怎麼樣。1 INSERT INTO `test`(`colA`, `colB`) VALUES ('', '');
插入成功,說明欄位即使設置為null值的時候,是可以插入空值的
---------------------------------------------------------------查詢--------------------------------------------------------- 現在表裡有三條數據 接下來我們使用 is not null 和 <> 檢索數據表裡的數據 1、使用IS NOT NULL 的查詢1 SELECT * FROM `test` WHERE colA IS NOT NULL
1 SELECT * FROM `test` WHERE colB IS NOT NULL
結論:使用 IS NOT NULL 查詢不會過濾空值,但是會過濾掉NULL。
2、使用 <> 的查詢
1 SELECT * FROM `test` WHERE colA <> '';
1 SELECT * FROM `test` WHERE colA <> '';結論:使用 <> 會過濾掉NULL和空值。 3、使用 count 查詢
1 SELECT COUNT(colA) FROM `test`;
1 SELECT COUNT(colB) FROM `test`;
結論:使用 count 會過濾掉 NULL 值,但是不會過濾掉空值。
總結
1、空值不占空間,NULL值占空間(占用一個位元組)。
2、當欄位不為NULL時,也可以插入空值。
3、當使用 IS NOT NULL 或者 IS NULL 時,只能查出欄位中沒有不為NULL的或者為 NULL 的,不能查出空值。
4、使用 <> 查詢時,會篩選掉空值和NULL值。
5、使用 count 統計時會過濾掉 NULL 值,但是不會過濾掉空值。