sql表中的空字串與null中的區別何在

2021-06-25 14:47:34 字數 3020 閱讀 8098

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樓:匿名使用者

沒弄清楚你說的什麼意思?

輸入字串,將字串中的字母所有字元按ASCII碼公升序排列後輸出

include int main include stdio.h include stdlib.h int cmp char const void a,const void b int main 這是用快速排序做的 這就是乙個排序問題嘛 c語言 輸入任意長度的字串,將該字串中的字元按ascii碼值公...

php如何替換字串中的指定字元

常用的函式有 str replace 和preg replace str replace 函式使用乙個字串替換字串中的另一些字元。str replace find,replace,string,count 引數 描述。find 必需。規定要查詢的值。replace 必需。規定替換 find 中的值的...

java統計字串中某字元出現的次數

public class charcounter public static int counter string s,char c int count 0 for int i 0 i試這個,bai 除錯好du了,可 zhi以直接執行 dao,祝 內工作學習順利容 把這個bai字串按照這個字 du符...