MySQL 中NULL和空值的區別,索引列是否可空值或null
在建立表的時候儘量把欄位的預設值設定成 not null,除非你想儲存null;因為在mysql中為null的的欄位不會走索引,做統計的時候也不會被統計進去,如果想統計進去必須做特定的處理,這樣做比較複雜。可以給欄位的值設定成0、一個特殊的值或者一個空串代替空值。
MySQL難以優化引用了可空列的查詢,它會使索引、索引統計和值更加複雜。
可空列需要更多的儲存空間,還需要在MySQL內部進行特殊處理。當可空列被索引的時候,
每條記錄都需要一個額外的位元組,還可能導致 MyISAM 中固定大小的索引(例如一個整數列上的索引)變成可變大小的索引。
建立表
CREATE TABLE `test_null` (
`id` int(11) NOT NULL,
`name` varchar(16) DEFAULT '',
`name_null` varchar(16) DEFAULT NULL,
`name_empty` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
(1)在進行count()統計某列的記錄數的時候(null不會統計進來)或者查詢不是某個值的時候(null值不會查出來),但是空值是會進行統計到其中的。
做特殊的處理:
大家可以試試統計name_empty預設值給空的欄位
(2)MySQL中的NULL其實是佔用空間的,空值('')是不佔用空間的
(3)判斷NULL 用IS NULL 或者 is not null,在sql語句中可以用IFNULL(expr1,expr2)函式,如果想判斷空字元用=''或者 <>、!=''來進行處理。