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

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

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 啊啊 我也是菜鳥,你看能滿足需求不 你這公式好複雜看不懂。但你水平這麼高了,我就給...