1樓:baby_原來
對於sql的新手,null值的概念常常會造成混淆,常認為null是與空字串''相同的事。情況並非如此。例如,下述語句是完全不同的:
mysql> insert into my_table (phone) values (null);
mysql> insert into my_table (phone) values ('');
這兩條語句均會將值插入phone(**)列,但第1條語句插入的是null值,第2條語句插入的是空字串。
第1種情況的含義可被解釋為“**號碼未知”,而第2種情況的含義可被解釋為“該人員沒有**,因此沒有**號碼”。
為了進行null處理,可使用is null和is not null操作符以及ifnull()函式。 在sql中,null值與任何其它值的比較(即使是null)永遠不會為“真”。
包含null的表示式總是會匯出null值,除非在關於操作符的文件中以及表示式的函式中作了其他規定。
下述示例中的所有列均返回null:
mysql> select null, 1+null, concat('invisible',null);
如果打算搜尋列值為null的列,不能使用expr = null測試。
下述語句不返回任何行,這是因為,對於任何表示式,expr = null永遠不為“真”:
mysql> select * from my_table where phone = null;
要想查詢null值,必須使用is null測試。
在下面的語句中,介紹了查詢null**號碼和空**號碼的方式:
mysql> select * from my_table where phone is null;
mysql> select * from my_table where phone = '';
如果正在使用myisam、innodb、bdb、或memory儲存引擎,能夠在可能具有null值的列上增加1條索引。
如不然,必須宣告索引列為not null,而且不能將null插入到列中。
用load data infile讀取資料時,對於空的或丟失的列,將用''更新它們。
如果希望在列中具有null值,應在資料檔案中使用\n。在某些情況下,也可以使用文字性單詞“null”。
使用distinct、group by或order by時,所有null值將被視為等同的。
使用order by時,首先將顯示null值,如果指定了desc按降序排列,null值將最後顯示。
對於聚合(累計)函式,如count()、min()和sum(),將忽略null值。對此的例外是count(*),它將計數行而不是單獨的列值。
例如,下述語句產生兩個計數。首先計數表中的行數,其次計數age列中的非null值數目:
mysql> select count(*), count(age) from person;
對於某些列型別,mysql將對null值進行特殊處理。如果將null插入timestamp列,將插入當前日期和時間。如果將null插入具有auto_increment屬性的整數列,將插入序列中的下一個編號
2樓:匿名使用者
沒有什麼好壞,
區別就在查詢語句上。。。
null的查詢條件要寫成
where col is null
""的查詢條件要寫成
where col=""
主要是看你的系統的定義中有沒有對""和有沒有特別的定義。。。
3樓:匿名使用者
在資料庫系統中,空值是(什麼也沒有)。
解釋:所謂的null就是什麼都沒有,連\0都沒有,\0在字串中是結束符,但是在實體記憶體是佔空間的,等於一個位元組,而null就是連這一個位元組都沒有。在資料庫裡是嚴格區分的,任何數跟null進行運算都是null, 判斷值是否等於null,不能簡單用=,而要用is關鍵字。
空 (null)
值表示數值未知(在實際意義中,如果使用null,就是代表變數值是未知的,比如手機號碼設為null,說明不知道手機號碼是什麼)。空值不同於空白或零值。沒有兩個相等的空值。
比較兩個空值或將空值與任何其它數值相比均返回未知,這是因為每個空值均為未知。
在寫入資料的時候,空字串也是一個確定的值,所以就算定義了 not null 也可以被寫入。
4樓:
''表示空字串(但它還是字元型:varchar或char),可以用=、<、>''來進行判斷,null表示什麼都沒有(int、double、char等都可以是null),即這個東西不存在,判斷用is null或者is not null。
欄位中如果出現null,對索引有一定的影響
5樓:小魚的眼皮
沒區別有的系統預設寫入 "" 資料庫中為 null
其實無所謂 不過寫入 null 在讀取該欄位為null值得紀錄時有用 其他沒什麼用
sql ‘’與null 的區別
6樓:
'' 表示
bai空字串
null表示什麼都沒有du,什麼都不zhi是判斷'' 用 ='' 或
<>'' , 而null 用is null 或is not null,欄位dao中如果內出現null 會對查詢語句容造成影響有可能導致索引失效,所以欄位中儘量不要出現null ,用'' 或其他字元代替 ,糾正一下其他人的觀點:null不代表空字串 哦, 代表表示什麼都沒有,什麼都不是,可以出現在任意型別欄位裡面(int,decimal,varchar 等等都可以是null),''只能在varchar,char型別裡面出現
7樓:龍羽君
都表示為空字串,區別主要在於查詢上
null的查詢條件要寫成 where 欄位名 is (not) null
''的查詢條件要寫成 where 欄位名=''
8樓:兩廂遺忘
什麼意思?你的意思是指空格與null的區別嗎?
9樓:匿名使用者
沒弄清楚你說的什麼意思?
識別字串中的每字元c,識別字串中的每一個字元c
cstring 是 mfc 的 class.或取長度應當是 用成員函式 brand.getlength 取 字串中的每個字元 用 brand.getat 函式。mfc 輸出顯示 較煩。可以用 messagebox 不能用簡單辦法寫出完整可執行的程式。除非為了應付老師的題目,如果自己寫應用程式,不必舍...
js中何如比較變數是否與字串相等
js字串相等的比較?直接比較就得了啊,沒equals。比如var a test var b test alert a b 在js中怎麼判斷兩個字串相等 s中字串比較值用 不同型別間比較,之比較 轉化成同一型別後的值 看 值 是否相等var str1 a var str2 b var str1 a i...
ecel中如何替換字串中的特定字元否則返回原
我有個笨辦法,因為其他更優的辦法我也不會哈,就將就你這個公式,解決沒有括號時的問題。我覺得可以用個if先判斷有沒有括號嘛,有括號才執行你這個公式,比如 if iserror find b2,1 find b2,1 1 啊啊 我也是菜鳥,你看能滿足需求不 你這公式好複雜看不懂。但你水平這麼高了,我就給...