在你習慣以前,NULL
值可能會使人驚訝,從概念上講,NULL
表示「缺失的未知值」,而且與其餘值的處理方式略有不一樣。mysql
要測試NULL
,請使用IS NULL
和IS NOT NULL
運算符,以下所示:sql
mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+
你不能使用算術比較運算符(如=
、<
或<>
)來測試NULL
,要本身演示,請嘗試如下查詢:segmentfault
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ | NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+
由於與NULL
進行任何算術比較的結果也是NULL
,因此沒法從這種比較中得到任何有意義的結果。測試
在MySQL中,0
或NULL
表示false
,其餘任何表示都是true
,布爾運算的默認真值爲1
。code
在GROUP BY
中,兩個NULL
值被視爲相等。字符串
在執行ORDER BY
時,若是你執行ORDER BY ... ASC
,則首先顯示NULL
值,若是執行ORDER BY ... DESC
,則爲最後一個值。get
使用NULL
時常見的錯誤是假設沒法將零或空字符串插入定義爲NOT NULL
的列中,但事實並不是如此,這些其實是值,而NULL
表示「沒有值」,你可使用IS [NOT] NULL
輕鬆地測試它,以下所示:查詢
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL; +-----------+---------------+------------+----------------+ | 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL | +-----------+---------------+------------+----------------+ | 0 | 1 | 0 | 1 | +-----------+---------------+------------+----------------+
所以,徹底能夠將零或空字符串插入NOT NULL
列,由於它們其實是NOT NULL
。co