1. 程式人生 > 資料庫 >Mysql中的NULL和Empty String

Mysql中的NULL和Empty String

最近新接觸Mysql,昨天新建一個表用於儲存表結構資訊:

create table tablist(TABLE_SCHEMA varchar(40),TABLE_NAME varchar(40),COLUMN_NAME varchar(40),COLUMN_TYPE varchar(40),IS_NULLABLE varchar(10),COLUMN_DEFAULT varchar(40),COLUMN_COMMENT varchar(1000),REMARK varchar(2000));
insert into tablist(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT)
select TABLE_SCHEMA,COLUMN_COMMENT
from information_schema.`COLUMNS` where TABLE_SCHEMA='leo';

然後查詢tablist表:

看看有哪些列沒有comment於是:

select * from tablist where COLUMN_COMMENT is null;

查到的結果居然是Empty set。不過從以上查詢結果和navicat都能看出:null值在結果集中顯示的是'null'的單詞,而空字串則顯示為空。

查過資料後發現Mysql的null值和空字串是有區別的,這裡很奇怪COLUMN_COMMENT在經過insert之後,null值居然變成了空字串(原因未明)。

使用select * from tablist where COLUMN_COMMENT='';查詢正常。

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.

在Mysql的myisam引擎中,null值佔用額外的儲存空間(1bit),空字串則完全不佔用空間。同時null值在B樹索引中也無法被儲存,資料量大時會造成較嚴重的效能問題。

兩者的查詢方式也不一樣:null值查詢使用is null/is not null查詢,而empty string使用=或者!=查詢即可。

總結

以上所述是小編給大家介紹的Mysql中的NULL和Empty String,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!