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樓:匿名使用者
沒弄清楚你說的什麼意思?
sql中如何統計段中字串的個數
看你用什麼樣的資料庫去實現,sql server oracle 所使用的函式語句有出入的。查查具體資料庫的函式 語句。做個儲存過程應該就能搞定 用replace 將空格替換成 就是空的,然後跟原先的字元長度比較,得出的就是字串的個數。嘿嘿 剛剛想到的。select id,len nr len rep...
C 中怎樣刪除字串中與另字串中相同的字元
include include include using namespace std int main cout str1 如何在c 的字串中刪除某個字串 千鋒教育 利用c的strstr函式查詢字串,然後strcpy拷貝覆蓋它。include int main 這裡只刪除了一處匹配的字串,如果有多...
sql中如何批量替換欄位裡的字串
估計你是沒理解replace的意思 譬如你舉例的這幾個 update 表名 set 欄位名 replace 欄位名,aaaa cccc 這樣以後 aaaa bbb 變成 cccc bbb aaaamtbbb 變成 ccccmtbbb 替換的是裡邊的aaa 你那麼寫不知道你要改什麼,如果你只要改aaa...