文章出處

寫程序這么多年,近幾天才發現,向 Oracle 數據庫表中,保存空字符串 '' ,結果成了 null.

由于數據庫數值 null 的比較、判斷,與空字符串 '' 存在差異。一不留神,代碼中留下了 bug ,期望保存成空字符串 '' ,結果成了 null,SQL where 條件的結果 (a1.dls = a2.dls),與預想的不同(兩個 null 不能用 = 進行比較,而兩個空字符串 '' 可以用=進行比較),導致查詢結果數據也不同。

 

查網上資料,發現 Oracle 在空字符串 '' 的處理上,沒有遵循 SQL 標準(ANSI)的做法。

實測 Oracle 11g 的 VARCHAR2 與 VARCHAR  兩個字符串字段類型,都是保存后數據成了 null。

未測試 CHAR 類型,因為這個不符合我們的業務實際要求。

 

嘗試翻閱各種網上文檔(主要使用 bing 及 yahoo 搜索引擎,本來喜歡 google 搜索,可惜現在用不了;百度搜索的技術文章排序有問題,前幾頁的文章質量較低,沒法用),也未找到合適的解決辦法。

最后決定,在需要保存空字符串 '' 的地方,統一轉換成保存字符串 '-' 。僅對于我們當前項目來說,是可以的。這也是無奈之舉。

畢竟這樣也能解決我們的問題。

 

這篇資料里有說:There is no such thing as an empty string in Oracle

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5984520277372

 

不知道最新版的 Oracle ,是否提供了遵循 SQL 標準的字符串類型。

 

--2017/8/24 補充,

Oracle 網站上,截止到 Oracle database 12c r2 版本 ,仍舊如此。

網址:

http://docs.oracle.com/database/122/SQLRF/Nulls.htm#SQLRF30037

里面有一段話:

Note:
Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.

 

簡單翻譯成中文,就是:

 

備注:

Oracle 數據庫當前將長度為零的字符串,當成 null。然而,未來版本可能會改變。Oracle 建議你不要將空字符串與 null 等同對待(意思是要按 SQL 標準,區別對待 SQL 空字符串及 SQL null)。

 

------------------------------------------------------------------------------------------------------------------------------------

類似/相關文章導航:


編程經驗點滴----避免在數據庫訪問函數中使用 try catch
http://www.cnblogs.com/jacklondon/archive/2012/05/04/2482659.html

編程經驗點滴----避免使用漢語拼音做變量名
http://www.cnblogs.com/jacklondon/archive/2012/05/03/2480609.html

編程經驗點滴----計算機軟件設計的幾個基本原則
http://www.cnblogs.com/jacklondon/p/3291829.html

 

 

------------------------------------------------------------------------------------------------------------------------------------

最近網站文章被其它網站抄襲嚴重,我不拒絕轉載,轉載請注明出處。

我是 Jacklondon Chen , @ http://www.cnblogs.com/jacklondon/ , @ http://zheguisoft.com/ .

-----------------------------------------------------------------------------------------------------------------------------------


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()