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,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'的單詞,而空字符串則顯示為空。
查過資料后發(fā)現(xiàn)Mysql的null值和空字符串是有區(qū)別的,這里很奇怪COLUMN_COMMENT在經(jīng)過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樹索引中也無法被存儲,數(shù)據(jù)量大時會造成較嚴重的性能問題。
兩者的查詢方式也不一樣:null值查詢使用is null/is not null查詢,而empty string使用=或者!=查詢即可。
總結
以上所述是小編給大家介紹的Mysql中的NULL和Empty String,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
mysql字符集引起的java.sql.SQLException:Incorrect?string?value:問題
文章主要介紹了在MySQL數(shù)據(jù)庫中插入生僻字和emoji表情包時遇到的字符編碼問題,解釋了utf8和utf8mb4的區(qū)別,并提供了修改數(shù)據(jù)庫編碼格式和更改MySQL參數(shù)的解決方案2024-11-11
mysql通過my.cnf修改默認字符集為utf-8的方法和注意事項
本文主要給大家介紹mysql通過my.cnf修改默認字符集為utf-8的方法,當然你也可以設置成別的,國際點還是utf-8好,以及在修改過程中要注意的一些事項,有需要的朋友們可以參考借鑒。2016-09-09
mysql如何在已有數(shù)據(jù)庫上統(tǒng)一字符集
這篇文章主要介紹了mysql如何在已有數(shù)據(jù)庫基礎上換字符集,數(shù)據(jù)庫里面,部分數(shù)據(jù)表和數(shù)據(jù)是latin1的,部分數(shù)據(jù)表和數(shù)據(jù)是UTF8,還有部分表,表結構是utf8而數(shù)據(jù)是latin1,下面說一下,怎么樣字符集統(tǒng)一成utf8,需要的朋友可以參考下2019-06-06

