Ascii 0 在資料庫上造成的困擾

閱讀時間約 4 分鐘
今天在工作時遇到一件奇怪的問題,
user反映明明欄位開了CHAR(6 byte),但裡面的文字卻只呈現5個byte,使用length去算整個欄位長度,卻顯示是6,
好吧,就來查查看是遇到甚麼問題了。
select dump(BEFORECOSIGNEREMPNO) from A.test
where NURSEGIVEDRUGIDSE IN (289839402,289769909) AND BEFORECOSIGNEREMPNO IS not NULL;
-------------------------------------
Typ=96 Len=6: 0,0,0,0,10,0
Typ=96 Len=6: 80,48,48,50,55,0
看這兩筆資料,很明顯最後一個byte被塞了acciss碼0的字元,
ascii中0代表 空字元 Null character,
理論上,文字欄位不應該有文字後又加了一個null字元,
也難怪套上oracle nvl()來檢查,還真的不會回應任何對應的欄位,
我們來看,真正欄位值為null時的asscii應該是什麼?
create table test1
as 
select * from dual;
alter table test1
add a varchar2(1 byte);
insert into test1
select 'x',null from dual;
commit;
select dump(a) from test1;
-------------------------------------
Typ=1 Len=1: 49
NULL
從上面的測試我們知道,真正的NULL欄位dump出來的質應該是NULL,而不是0,
當你程式把null 的ascii值 0 給塞進資料庫裡,對資料庫來說,這個時候欄位有ascii 值,資料庫就不認為是NULL了。
--我們手動塞一個ascii 為0的值到資料庫中(ascii 0 : Null)
update test1 set a=chr(0) where dummy='x';    
commit;
select dump(a),nvl(a,'is null'),a.* from test1 a;
-------------------------------------
Typ=1 Len=1: 49    1    X    1
Typ=1 Len=1: 0            x
上面的測試很清楚知道,ascii 0 其實還是有字符的,只是這個字符代表的是null,但對資料庫的欄位來說,欄位不是null的,很繞口對吧?
那空白呢?
我們也來順便測試一下
--我們塞一個ascii 32 來當成空白
insert into test1
select 'y',chr(32) from dual;     
--我們塞一個空白字元進去
insert into test1
select 'y',' ' from dual;             
commit;
select dump(a),length(a),a.* from test1 a where dummy='y';
-------------------------------------
Typ=1 Len=1: 32    1    y     
Typ=1 Len=1: 32    1    y
這邊實驗的結果,我們可以發現,輸入空白,ascii碼為 32,跟你使用chr(32)的方式是一樣的,
所以ascii空白對資料庫來說,就是空白。
估計這個ascii應該是轉檔程式在不同系統間轉置資料所造成的,
至於什麼原因,因為已經不可考,所以就沒辦法知道是什麼原因造成的。
    0會員
    4內容數
    留言0
    查看全部
    發表第一個留言支持創作者!
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    區塊鏈究竟是什麼技術?用簡單的話解釋一下。 區塊鏈應用在供應鏈溯源、版權保護等領域有潛力。 區塊鏈技術的發展為數字身份認證帶來了新思路。 區塊鏈是加密貨幣等數字金融領域的核心技術。
    Thumbnail
    每個學術新手必犯的錯誤,就是文獻收集不夠。 新手常常會誤會自己的想法前無古人後無來者,以為自己的研究想法很有價值。然而,這都只是讀的文獻不夠多而已。一個有價值的想法,不僅需要深度和廣度,也需要大量的文獻來增加引用和提高說服力。 記得,豐富的文獻資源能讓你的觀點更具有說服力。
    地球只是活著的資料庫而已。 
而物種的增加與減少,就是地球活資料庫的增廣與縮編。 想與資料庫同步, 可以透過讀書、旅行去下載;創作、寫生去上傳。 當人類主宰了地球的資料庫更新,時間就會失去未來性,只剩下證明的功能而已。 才發現原因! 是萬物之靈,只想透過主宰,來證明自己。
    今天到大學聽一位講者分享地方志編輯經驗。這本地方志是地方政府招標,最後由在地團隊得標執行。會中主持人提到,從前地方志多由北部公關公司、顧問公司得標主導,這幾年越來越多在地人書寫地方歷史,是一件好事。 史官難為,更何況是僅一年餘的時間要完成一部地方志。聽完後的感想,個人思考了幾個層面。
    Thumbnail
    Howard Marks說過:知道未來很困難,了解現況卻沒那麼難,也許我們從不知道要去哪裡,但最好清楚了解我人在哪裡。因此想藉過去的歷史資料來觀察,我們現在在哪個位置。 1.縮表的程度 2.縮表對各資產的影響 (2)VT的2018整年跌幅為9.8% 3.緊縮到什麼時候
    雖然數據分析師是新職位,但數據分析或是資料分析的概念一點都不新。公司裡面行之有年的職位,不管是行銷、業務、採購、倉管,每個職位都需要數據,也都需要分析。隨著大數據、資料科學、機器學習、AI等酷炫的新名詞、新技術與新應用出現,所需的知識與技能多到員工爆肝也學不完。
    Thumbnail
    我在學習人體速寫與結構時,老師曾說過,畫畫不是憑空想像出來的。更準確地說,所有天馬行空的幻想都建立於真實事物之上。 現在,來做個小測試,看看你腦海中的資料庫是否足夠豐富吧!
    Thumbnail
    要不是上海LINE子公司出了個包,不會有新聞稿這個鉅細靡遺地列出所有Line服務細項內容,各是分別存在哪個國家的DC(Data Center) 先說明一下台灣支付卡交易流程。 如下圖,黑色框框就是在台灣本地的交易。依照新聞稿所描述,都是從韓國與日本的DC打回台灣然後在本地清算。
    Thumbnail
    SETP1. 開起Dreamweaver,執行【網站>新增網站】定義使用PHP 的網站,除設定『本機網站資料夾』外,於『伺服器』設定中,設定『伺服器連線方式:本機/ 網路』、『伺服器資料夾』,按下『進階』設定『伺服器式:PHP MySQL』。 STEP2. 連結資料庫,新增空白練習頁面並儲存檔案,
    Thumbnail
    雖然數據分析師是新職位,但數據分析或是資料分析的概念一點都不新。公司裡面行之有年的職位,不管是行銷、業務、採購、倉管,每個職位都需要數據,也都需要分析。隨著大數據、資料科學、機器學習、AI等酷炫的新名詞、新技術與新應用出現,所需的知識與技能多到員工爆肝也學不完。
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    區塊鏈究竟是什麼技術?用簡單的話解釋一下。 區塊鏈應用在供應鏈溯源、版權保護等領域有潛力。 區塊鏈技術的發展為數字身份認證帶來了新思路。 區塊鏈是加密貨幣等數字金融領域的核心技術。
    Thumbnail
    每個學術新手必犯的錯誤,就是文獻收集不夠。 新手常常會誤會自己的想法前無古人後無來者,以為自己的研究想法很有價值。然而,這都只是讀的文獻不夠多而已。一個有價值的想法,不僅需要深度和廣度,也需要大量的文獻來增加引用和提高說服力。 記得,豐富的文獻資源能讓你的觀點更具有說服力。
    地球只是活著的資料庫而已。 
而物種的增加與減少,就是地球活資料庫的增廣與縮編。 想與資料庫同步, 可以透過讀書、旅行去下載;創作、寫生去上傳。 當人類主宰了地球的資料庫更新,時間就會失去未來性,只剩下證明的功能而已。 才發現原因! 是萬物之靈,只想透過主宰,來證明自己。
    今天到大學聽一位講者分享地方志編輯經驗。這本地方志是地方政府招標,最後由在地團隊得標執行。會中主持人提到,從前地方志多由北部公關公司、顧問公司得標主導,這幾年越來越多在地人書寫地方歷史,是一件好事。 史官難為,更何況是僅一年餘的時間要完成一部地方志。聽完後的感想,個人思考了幾個層面。
    Thumbnail
    Howard Marks說過:知道未來很困難,了解現況卻沒那麼難,也許我們從不知道要去哪裡,但最好清楚了解我人在哪裡。因此想藉過去的歷史資料來觀察,我們現在在哪個位置。 1.縮表的程度 2.縮表對各資產的影響 (2)VT的2018整年跌幅為9.8% 3.緊縮到什麼時候
    雖然數據分析師是新職位,但數據分析或是資料分析的概念一點都不新。公司裡面行之有年的職位,不管是行銷、業務、採購、倉管,每個職位都需要數據,也都需要分析。隨著大數據、資料科學、機器學習、AI等酷炫的新名詞、新技術與新應用出現,所需的知識與技能多到員工爆肝也學不完。
    Thumbnail
    我在學習人體速寫與結構時,老師曾說過,畫畫不是憑空想像出來的。更準確地說,所有天馬行空的幻想都建立於真實事物之上。 現在,來做個小測試,看看你腦海中的資料庫是否足夠豐富吧!
    Thumbnail
    要不是上海LINE子公司出了個包,不會有新聞稿這個鉅細靡遺地列出所有Line服務細項內容,各是分別存在哪個國家的DC(Data Center) 先說明一下台灣支付卡交易流程。 如下圖,黑色框框就是在台灣本地的交易。依照新聞稿所描述,都是從韓國與日本的DC打回台灣然後在本地清算。
    Thumbnail
    SETP1. 開起Dreamweaver,執行【網站>新增網站】定義使用PHP 的網站,除設定『本機網站資料夾』外,於『伺服器』設定中,設定『伺服器連線方式:本機/ 網路』、『伺服器資料夾』,按下『進階』設定『伺服器式:PHP MySQL』。 STEP2. 連結資料庫,新增空白練習頁面並儲存檔案,
    Thumbnail
    雖然數據分析師是新職位,但數據分析或是資料分析的概念一點都不新。公司裡面行之有年的職位,不管是行銷、業務、採購、倉管,每個職位都需要數據,也都需要分析。隨著大數據、資料科學、機器學習、AI等酷炫的新名詞、新技術與新應用出現,所需的知識與技能多到員工爆肝也學不完。