Oracle中的NULL(五)
最近在論壇上經常看到,很多人提出和NULL有關的問題。NULL其實是資料庫中特有的型別,Oracle中很多容易出現的錯誤都是和NULL有關的。
打算簡單的總結一下NULL的相關知識。
這一篇繼續討論空字元’’和NULL的關係。
Oracle中的NULL(一):http://yangtingkun.itpub.net/post/468/244434
Oracle中的NULL(二):http://yangtingkun.itpub.net/post/468/245107
Oracle中的NULL(三):http://yangtingkun.itpub.net/post/468/245259
Oracle中的NULL(四):http://yangtingkun.itpub.net/post/468/245697
上面一篇文章中,已經從事實的角度證明了空字元就是NULL的字元表現形式。這一篇將試圖解釋為什麼空字元就是NULL。而且準備簡單描述一下字串合併操作||的特殊性。
根據NULL的定義,NULL是不確定、未知的含義,那麼為什麼字元型別的NULL是一個空字元呢?而且,對於NULL的加、減、乘、除等操作的結果都是NULL,而為什麼字串合併操作||,當輸入字串有一個為空時,不會得到結果NULL。
SQL> SELECT NULL || 'A', 'B' || NULL, NULL || NULL FROM DUAL;
NU ' N
-- - -
A B
上面兩個問題需要從NULL的儲存格式上解釋。Oracle在儲存資料時,先是儲存這一列的長度,然後儲存列資料本身。而對於NULL,只包含一個FF,沒有資料部分。簡單的說,Oracle用長度FF來表示NULL。
由於Oracle在處理的資料儲存的時候儘量避免0的出現,因此,認為這裡FF表示的是長度為0也是有一定道理的。或者從另一方面考慮,NULL只有一個長度,而沒有資料部分。
而對於字串來說,不管是長度為0的字串還是沒有任何資料的字串,所代表的含義都是一個空字串。從一點上講,空字串就是NULL也是有一定的道理的。
如果認為空字串是字元形式的NULL,那麼||操作的結果就不難理解了。
最後需要說明的是,不要將ORACLE裡面的空字串’’與C裡面的空字串””混淆。C裡面的空字串並非不不含任何資料,裡面還包含了一個字串結束符。C語言中的空字串””對應Oracle中ASCII表中的0值,既CHR(0)。
但CHR(0)是一個確定的值,它顯然不是NULL。
SQL> SELECT * FROM DUAL WHERE CHR(0) = CHR(0);
D
-
X
SQL> SELECT * FROM DUAL WHERE CHR(0) IS NULL;
未選定行
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69124/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中的nullOracleNull
- Oracle中的NULL(六)OracleNull
- Oracle中的NULL(八)OracleNull
- oracle中關於null的定義OracleNull
- MySQL中is not null和!=null和<>null的區別MySqlNull
- Oracle唯一約束中NULL的處理OracleNull
- 【NULL】Oracle null值介紹NullOracle
- Oracle外來鍵約束中NULL的處理OracleNull
- 主題:Oracle中Null與空字串''''的區別OracleNull字串
- ORACLE -> NULL & INDEXESOracleNullIndex
- hive中的null值HiveNull
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- 關於 oracle NULLOracleNull
- 大話Oracle nullOracleNull
- 警惕SQL中間的NULLSQLNull
- SQL中的空值NULLSQLNull
- SQL server中的NULL值SQLServerNull
- ORACLE關於NULL的總結OracleNull
- Oracle空串與null的處理OracleNull
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!MySqlNull索引
- oracle中round()四捨五入Oracle
- SQL 查詢中的 NULL 值SQLNull
- 去除陣列中的 null 值陣列Null
- JavaScript中的“undefined、null”區別?JavaScriptUndefinedNull
- 深入詳解SQL中的NullSQLNull
- sql中的安全問題nullSQLNull
- Oracle 11g中的_optimizer_null_aware_antijoin隱含引數OracleNull
- oracle sql_not exists與null的測試OracleSQLNull
- 了不起的 “filter(NULL IS NOT NULL)”FilterNull
- javascrit中undefined和null的區別JavaUndefinedNull
- Shell指令碼中的 /Dev/Null 用途指令碼devNull
- js中null和undefined的區別JSNullUndefined
- js中undefined和null的區別JSUndefinedNull
- mysql中null與“空值”的坑MySqlNull
- MySQL中的NULL和空串比較MySqlNull
- SQL中的Null深入研究分析SQLNull
- CHECK約束中的NULL條件Null
- SQL中關於NULL的程式碼SQLNull