ORA-29275部分多字节字符处理

来源:互联网 发布:天刀ol捏脸数据 编辑:程序博客网 时间:2024/05/16 11:16
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后, 就正常了。
原创粉丝点击