1. 程式人生 > >MySQL中NULL和空值的區別

MySQL中NULL和空值的區別

平時我們在使用MySQL的時候,對於MySQL中的NULL值和空值區別不能很好的理解。注意到NULL值是未知的,且佔用空間,不走索引,DBA建議建表的時候最好設定欄位是NOT NULL 來避免這種低效率的事情的發生。

問題 1: 首先,我們需要搞清楚 “空值” 和”NULL”的概念:
1:空值(”)是不佔用空間的
2: MySQL中的NULL其實是佔用空間的。官方文件說明:

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.

長度驗證:注意空值的”之間是沒有空格的。
這裡寫圖片描述

問題2:判斷欄位不為空的時候,查詢語句到底是用 select * from tablename where columnname <> ” 還是用select * from tablename where column is not null,2個查詢語句有啥不同。

CREATE TABLE `test` (
  `a` int(11) NOT NULL,
  `b` varchar(20) DEFAULT NULL,
  `c` varchar(20) NOT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8 ;

測試資料:
這裡寫圖片描述

查詢驗證過程:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

注意事項:
1:在進行count()統計某列的記錄數的時候,如果採用的NULL值,會別系統自動忽略掉,但是空值是會進行統計到其中的。
2: 判斷NULL 用IS NULL 或者 is not null,SQL 語句函式中可以使用ifnull()函式來進行處理,判斷空字元用 =”或者 <>”來進行處理
3: 對於MySQL特殊的注意事項,對於timestamp資料型別,如果往這個資料型別插入的列插入NULL值,則出現的值是當前系統時間。插入空值,則會出現 ‘0000-00-00 00:00:00’
4:對於空值的判斷到底是使用is null 還是 =”要根據實際業務來進行區分。