最近新接觸Mysql,昨天新建一個表用於存儲表結構信息: 然後查詢tablist表: 看看有哪些列沒有comment於是: select * from tablist where COLUMN_COMMENT is null; 查到的結果居然是Empty set。不過從以上查詢結果和navicat都 ...
最近新接觸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,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,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使用=或者!=查詢即可。