oracle中的不可見字元
阿新 • • 發佈:2019-02-11
今天做統計的時候發現一個數據表面上看來是‘920 ’但去空格無亂如何都去不掉,最後發現是不可見字元。。。
於是在網上搜到一篇文章,如何來判斷這個不可見字元的問題~
按下面的方法判斷出不可見字元的ascII碼是10,於是用rtrim('原字元','chr(10)')來去掉這個不可見字元。
今天遇到一則案例,問題是資料庫中看來完全相同的欄位卻存在長度差異。
通過lengthb以及dump,我們可以知道問題所在:
SQL> select trim(log.sname),dump(log.sname),lengthb(log.sname) 2 from st.LIMPORT_LOG log 3 where log.dfee > date '2008-06-22' 4 and log.dfee < date '2008-06-23' 5 and log.sspname like '263%' 6 group by log.sname,dump(log.sname); TRIM(LOG.SNAME) DUMP(LOG.SNAME) LENGTHB(LOG.SNAME) ------------------- ----------- ---------------------------------------------- 263網路通訊 Typ=1 Len=15: 50,54,51,205,248,194,231,205,168,208,197,0,0,0,0 15 263網路通訊 Typ=1 Len=11: 50,54,51,205,248,194,231,205,168,208,197 11 |
使用DUMP函式我們發現,在有問題的資料中,資料末尾存在幾個字元0,0,0,0,也就是多出了幾個字元。
正是這多出的幾個字元導致了儲存異常。
那麼這個0代表什麼字元呢?在ASCII編碼表裡我們可以看到這對應了一個不可見字元,這是資料入庫時的異常導致的:
-The End-