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

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

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語句可以擷取指定欄位後面的字串,以sqlserver為例,需要用到charindex函式和substring函式。如test表中有如下資料,要求截圖str欄位中逗號後邊的內容。可用如下語句 1select id,substring str,charindex str 1,len str cha...

什麼是字串常量,字元常量與字串常量的區別是什麼

字串常量 一對雙引號括起來的字元序列 字串常量是由一對雙引號括起的字元序列。例如 china c program 12.5 等都是合法的字串常量。字串常量和字元常量是不同的量。它們之間主要有以下區別 1 字元常量由單引號括起來,字串常量由雙引號括起來。2 字元常量只能是單個字元,字串常量則可以含一個...

python裡統計字串中另字串的個數

答案為3 用正則 import re s abababab len re.findall r aba s 3答案為2,用字串的count方法 import string s abababab s.count aba 2替換第二個 aba 為 bab 用字串的切片方法 可能方法醜陋了點,初學者見諒 s...