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',
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
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后, 就正常了。