首頁  >  文章  >  資料庫  >  MySQL如何判斷欄位是否為null

MySQL如何判斷欄位是否為null

(*-*)浩
(*-*)浩原創
2019-05-07 10:57:338176瀏覽

相信很多花了MySQL很久的人,對這兩個字段屬性的概念還不是很清楚,一般會有以下疑問:

我字段類型是not null,為什麼我可以插入空值

為什麼not null的效率比null高

判斷欄位不為空的時候,到底要select * from table where column <> '' 還是要用select * from table wherecolumn is not null 呢。

MySQL如何判斷欄位是否為null

帶著上面幾個疑問,我們來深入研究null 和 not null 到底有什麼不一樣。

首先,我們要搞清楚「空值」 和「NULL」 的概念:

空值是不佔用空間的

mysql中的NULL其實是佔用空間的,以下是來自於MYSQL官方的解釋:

“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.」

打個比方來說,你有一個杯子,空值代表杯子是真空的,NULL代表杯子中裝滿了空氣,雖然杯子看起來都是空的,但是差別是很大的。

搞清楚「空值」和「NULL」的概念之後,問題基本上就明了,我們搞個例子測試一下:

CREATE TABLE  `test` (  
 `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,  
 `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL  
) ENGINE = MYISAM ;

插入資料:

INSERT INTO `test` VALUES (null,1);

mysql發生錯誤:

#1048 - Column 'col1' cannot be null

再來一條

INSERT INTO `test` VALUES ('',1);

成功插入。

可見,NOT NULL 的欄位是不能插入“NULL”的,只能插入“空值”,上面的問題也就有答案了。

對於問題,上面我們已經說過了,NULL 其實不是空值,而是要佔用空間,所以mysql在進行比較的時候,NULL 會參與欄位比較,所以對效率有一部分影響。

而且B樹索引時不會儲存NULL值的,所以如果索引的欄位可以是NULL,索引的效率會下降很多

MYSQL建議列屬性盡量為NOT NULL

長度驗證:注意空值的''之間是沒有空格的。

mysql> select length(''),length(null),length(' ');

+------------+--------------+--------------+

| length('') | length(null) | length(' ') |

+------------+--------------+--------------+

| 0 | NULL | 2 |

+------------+--------------+--------------+

注意事項:

在進行count()統計某一列的記錄數的時候,如果採用的NULL值,系統會自動忽略掉,但是空值是會進行統計到其中的。

判斷NULL 用IS NULL 或IS NOT NULL, SQL語句函數中可以使用ifnull()函數來處理,判斷空字元用=''或<>''來處理

對於MySQL特殊的注意事項,對於timestamp資料類型,如果往這個資料類型插入的資料列插入NULL值,則出現的值是目前系統時間。插入空值,則會出現 0000-00-00 00:00:00

對於空值的判斷到底是使用is null 還是='' 要根據實際業務來進行區分。

以上是MySQL如何判斷欄位是否為null的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn