ORA-29275部分多位元組字元處理

來源:互聯網
上載者:User
1.在oracle中欄位中找出漢字的方法:可以利用length(testname)和lengthb(testname),其中length(testname)不論數字或者字元都算一個, 而lengthb則不同,比如說testname的值為:54看法12,用length(testname)的值為6,而lengthb(testname)的值為:8。 利用這個就可以非常清楚的判斷一個字元中是否包含漢字了(字母除外)。
to_single_byte(c)轉換成半形 to_multi_byte(c)轉換成全形 執行個體: SELECT '12345',         DUMP('12345'),         TO_SINGLE_BYTE('12345'),         DUMP(TO_SINGLE_BYTE('12345')) FROM dual;
12345 Typ=96 Len=10: 163,177,163,178,163,179,163,180,163,181 12345 12345 Typ=1 Len=5: 49,50,51,52,53
實際例子:
select * from  TB_SHINTECH_IQC_BASE_INFO       報錯:ORA-29275 解決方案如下: 方法一: select mtrl_id,DEF_STATE,lengthb(DEF_STATE),lengthb(TO_SINGLE_BYTE(DEF_STATE))  from TB_SHINTECH_IQC_BASE_INFO   where lengthb(DEF_STATE)<>lengthb(TO_SINGLE_BYTE(DEF_STATE))

update TB_SHINTECH_IQC_BASE_INFO  set DEF_STATE=TO_SINGLE_BYTE(DEF_STATE) where lengthb(DEF_STATE)<>lengthb(TO_SINGLE_BYTE(DEF_STATE))
select addr from test_app 如果addr中有半個中文字元則會報這個異常,原因為Oracle編碼問題。 解決方案二:開發改SQL語句 select to_nchar(addr)  from test_app

解決方案三:改資料庫字元集 檢查他們Oracle的nls_lang環境變數,發現他們用戶端的nls_lang設定為 american. 改成export NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280後, 就正常了。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.