日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

编程经验点滴----在 Oracle 数据库中保存空字符串

發(fā)布時(shí)間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 编程经验点滴----在 Oracle 数据库中保存空字符串 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫程序這么多年,近幾天才發(fā)現(xiàn),向 Oracle 數(shù)據(jù)庫表中,保存空字符串 '' ,結(jié)果成了 null.

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

查網(wǎng)上資料,發(fā)現(xiàn) Oracle 在空字符串 '' 的處理上,沒有遵循 SQL 標(biāo)準(zhǔn)(ANSI)的做法。

實(shí)測(cè) Oracle 11g 的 VARCHAR2 與VARCHAR兩個(gè)字符串字段類型,都是保存后數(shù)據(jù)成了 null。

未測(cè)試 CHAR 類型,因?yàn)檫@個(gè)不符合我們的業(yè)務(wù)實(shí)際要求。

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

最后決定,在需要保存空字符串 '' 的地方,統(tǒng)一轉(zhuǎn)換成保存字符串 '-' 。僅對(duì)于我們當(dāng)前項(xiàng)目來說,是可以的。這也是無奈之舉。

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

這篇資料里有說: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 標(biāo)準(zhǔn)的字符串類型。

--2017/8/24 補(bǔ)充,

Oracle 網(wǎng)站上,截止到 Oracle database 12c r2 版本 ,仍舊如此。

網(wǎng)址:

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.

簡(jiǎn)單翻譯成中文,就是:

備注:

Oracle 數(shù)據(jù)庫當(dāng)前將長(zhǎng)度為零的字符串,當(dāng)成 null。然而,未來版本可能會(huì)改變。Oracle 建議你不要將空字符串與 null 等同對(duì)待(意思是要按 SQL 標(biāo)準(zhǔn),區(qū)別對(duì)待 SQL 空字符串及 SQL null)。

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

類似/相關(guān)文章導(dǎo)航:

編程經(jīng)驗(yàn)點(diǎn)滴----避免在數(shù)據(jù)庫訪問函數(shù)中使用 try catch
http://www.cnblogs.com/jacklondon/archive/2012/05/04/2482659.html

編程經(jīng)驗(yàn)點(diǎn)滴----避免使用漢語拼音做變量名
http://www.cnblogs.com/jacklondon/archive/2012/05/03/2480609.html

編程經(jīng)驗(yàn)點(diǎn)滴----計(jì)算機(jī)軟件設(shè)計(jì)的幾個(gè)基本原則
http://www.cnblogs.com/jacklondon/p/3291829.html

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

最近網(wǎng)站文章被其它網(wǎng)站抄襲嚴(yán)重,我不拒絕轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處。

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

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

總結(jié)

以上是生活随笔為你收集整理的编程经验点滴----在 Oracle 数据库中保存空字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。