1. 程式人生 > >oracle中的不可見字元

oracle中的不可見字元

今天做統計的時候發現一個數據表面上看來是‘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-