ascii0是個空字元,如果將這個字元插入到oracle資料庫中會是什麼現象,是null嗎?
建立一張測試表
create table test(id int, name varchar2(10), comm varchar2(30));
向這張測試表中插入以下資料
insert into test values(1, null, 'null'); --直接插入null
insert into test values(2, '', 'empty string'); --插入空字元
insert into test values(3, ' ', 'blank space'); --插入空格
insert into test values(4, chr(0), 'ascii0'); --插入ascii為0的字元
查測試表,可以看到第2列似乎都是空的
sql> select * from test;
id name comm
------ ---------- ---------------
1 null
2 empty string
3 blank space
4 ascii0
檢視第2列不為空值的行
sql> select * from test where name is not null;
id name comm
------ ---------- ---------------
3 blank space
4 ascii0
加trim函式再查
sql> select * from test where trim(name) is not null;
id name comm
------ ---------- ---------------
4 ascii0
可以看到第4行的第2列跟第3行的第2列的空格一樣,都是佔了乙個位元組,而且他的ascii碼為0,那麼我們可以通過下面的方式將第4行查出來
sql> select * from test where name = chr(0);
id name comm
------ ---------- ---------------
4 ascii0
ascii為0插入到oracle中,並不是null,它占用乙個位元組,要查詢出來只能用=chr(0)
盡量別插入ascii為0的字元到資料庫中,可以用插入空字串或者null代替,否則檢索起來不方便
碰到實在是不知道這個字段到底存的是什麼的時候,可以使用dump函式去檢視它具體的ascii碼
這裡分享下這個實驗的由來。
因為要對比兩個庫的同一張表的資料差異性,表資料量不大,而且僅相差三條資料,肉眼看肯定不靠譜,很自然的就想到在乙個庫上建一張臨時表,將另外乙個庫的這張表導過來,然後做個minus。但minus出來的結果竟然是第一張表的所有行,當時氣氛一度很尷尬。
後面經過仔細分析,才發現原來是chr(0)在搞鬼,通過工具匯出chr(0)的時候,它會自動轉換成null,然而資料庫中chr(0)並不是null,也就是說匯出來再導進去的資料已經跟原始表的資料不一樣了。
jquery mobile AJAX特性的陷阱
簡單情況是 mvc 重定向,url不變 試了n種方式,跳來跳去,無解,服務端跳,寫js跳,生成跳轉中間頁跳。失敗 後來一看,明明已經跳到新頁了,樣式什麼還是原頁的,有點火大了。出去溜一圈,喝杯水,和同事東拉西扯一通。回頭一看,突然反應過來,這不是ajax的效果麼,坑我半個多小時。為加驗證,是手動呼叫...
setTimeout為0的作用
但settimeout f,0 的作用很簡單,就是為了把f放到執行佇列的最後去執行。也就是說,無論settimeout f,0 寫在哪,都可以保證在佇列的最後執行。js解析器會把settimeout f,0 裡的f壓到佇列的最後,因為它是非同步操作。settimeout第二個引數為0表示立即執行。當...
陣列下標為0
長度為0的陣列 c語言的非標準用法之一 在標準c和c 中,長度為0的陣列是被禁止使用的。不過在gnu c中,存在乙個非常奇怪的用法,那就是長度為0的陣列,比如array 0 很多人可能覺得不可思議,長度為0的陣列是沒有什麼意義的,不過在這兒,它表示的完全是另外的一層意思,這個特性是不可移植的,所以,...