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

時間 2021-06-25 14:46:02

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

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

在VB中,字串為零長度和字串為Null有什麼區別

這兩個是完全不同的,實際使用也完全不同。字串為 它還是字串,只不過是一種特殊狀態 零長度,類似於c中的 0 字串為null,其實這個字串已經不是字串了,更加確切的說,這個字串的變數的值已經無效了。對三樓 murderor無語,不懂可以,但不要誤導人。null的實際使用與零字串差別太大了 任何與nul...

oracle中字串的大小比較,字串與數字的比較和運算

oracle比較字串是根據ascii碼來的,第一個字母的ascii大小比較如果相等再比較下一個,類推。字串和數字進行操作是會報異常的,因為型別不一樣不能進行比較。oracle在執行sql的時候有些時候會自動轉換,比如 select from chan customer cc where cc.cus...

登錄檔中字串鍵值的問題

沒有區別的,因為你已經定義為了字串型了,所以就算變成了 c windows system32 systray.exe 也是一樣的效果的 不清楚但各種語言中好像把 作為標註 就是說 裡面的東西就不不能被執行的了 難度非常非常高,我寫的 效率非常低下,就不拿出來獻醜了,佔貼共同期待 為什麼難度非常非常高...