mysql中null和空字串的區別與問題!

2021-09-29 02:49:55 字數 1900 閱讀 3606

ifnull() 函式用於判斷第乙個表示式是否為 null,如果為 null 則返回第二個引數的值,如果不為 null 則返回第乙個引數的值。

ifnull() 函式語法格式為:ifnull(expression, alt_value)

查詢如果a欄位為空則查詢a,如果a為空則查詢b.

select case when a <> '' then a else b end from demo ;

總結:

判斷null用is null  或者 is not null。 sql語句裡可以用ifnull函式來處理

判斷空字串『』,要用 ='' 或者 <>''。sql語句裡可以用if(col,col,0)處理,即:當col為true時(非null,及非'')顯示,否則列印0

陷阱一:空值不一定為空

空值是乙個比較特殊的字段。在mysql資料庫中,在不同的情形下,空值往往代表不同的含義。這是mysql資料庫的一種特性。如在普通的字段中(字元型的資料),空值就是表示空值。但是如果將乙個空值的資料插入到timestamp型別的字段中,空值就不一定為空。此時為出現什麼情況呢

我先建立了乙個表。在這個表中有兩個字段:user_id(其資料型別是int)、date(其資料型別是timestamp)。現在往這個表中插入一條記錄,其中往date欄位中插入的是乙個null空值。可是當我們查詢時,其結果顯示的卻是插入記錄的當前時間。這是怎麼一回事呢?其實這就是在mysql資料庫中執行sql語句時經常會遇到的乙個陷阱:空值不一定為空。在操作時,明明插入的是乙個空值的資料,但是最後查詢得到的卻不是乙個空值。

在mysql資料庫中,null對於一些特殊型別的列來說,其代表了一種特殊的含義,而不僅僅是乙個空值。對於這些特殊型別的列,各位讀者主要是要記住兩個。乙個就是筆者上面舉的timestamp資料型別。如果往這個資料型別的列中插入null值,則其代表的就是系統的當前時間。另外乙個是具有auto_increment屬性的列。如果往這屬性的列中插入null值的話,則系統會插入乙個正整數序列。而如果在其他資料型別中,如字元型資料的列中插入null的資料,則其插入的就是乙個空值。

陷阱二:空值不一定等於空字元

在mysql中,空值(null)與空字元(』』)相同嗎?答案是否定的。

在同乙個資料庫表中,同時插入乙個null值的資料和乙個』』空字元的資料,然後利用select語句進行查詢。顯然其顯示的結果是不相同的。從這個結果中就可以看出,空值不等於空字元。這就是在mysql中執行sql語句遇到的第二個陷阱。在實際工作中,空值資料與空字元往往表示不同的含義。資料庫管理員可以根據實際的需要來進行選擇。如對於**號碼等字段,可以預設設定為空值(表示根本不知道對方的**號碼)或者設定為空字元(表示後來取消了這個號碼)等等。由於他們在資料庫中會有不同的表現形式,所以資料庫管理員需要區別對待。筆者更加喜歡使用空值,而不是空字元。這主要是因為針對空值這個資料型別有幾個比較特殊的運算字元。如果某個欄位是空字元,資料庫中是利用欄位名稱來代替。相反,如果插入的是空值,則直接顯示的是null。這跟其他資料庫的顯示方式也是不同的。

一是is null 和is not null關鍵字。如果要判斷某個字段是否含用空值的資料,需要使用特殊的關鍵字。其中前者表示這個欄位為空,後者表示這個欄位為非空。在select語句的查詢條件中這兩個關鍵字非常的有用。如需要查詢所有**號碼為空的使用者(需要他們補充**號碼資訊),就可以在查詢條件中加入is not null關鍵字。

二是count等統計函式,在空值上也有特殊的應用。如現在需要統計使用者資訊表中有**號碼的使用者數量,此時就可以使用count函式、同時將**號碼作為引數來使用。因為在統計過程中,這個函式會自動忽略空值的資料。此時統計出來的就是有**號碼的使用者資訊。如果採用的是空字元的資料,則這個函式會將其統計進去。統計剛才建立的兩條記錄時,系統統計的結果是1,而不是2。可見系統自動將null值的資料忽略掉了。

mysql 判斷null 和 空字串

1.在mysql中null 不能使用任何運算子與其他字段或者變數 函式 儲存過程 進行運算。若使用運算資料就可能會有問題。2.對null 的判斷 建立乙個user表 id 主健 name 可以為空 select from user insert into user values 33 null 建立...

關於mysql中的null值和空字串

null值 一般說空值 就是不寫 再mysql背景顯示null 空字串就是寫了任何東西後刪除就變成了空字串 create table test null id int value 1 varchar 128 value 2 varchar 128 not null 1.條件查詢 select fro...

空字元與空格字元 NULL 空字串

在許多的程式語言內,空字串的標記為兩個雙引號 而null又有以下理解 1.字面理解,null就是無效的 無價值的 2.在程式設計中,變數以null結尾,表示其後沒有可用的資料,資料讀取在此結束。3.null在資料庫中表示不知道 unknown 的資料,主要有3種意思 a 知道資料存在,但不知道具體值...