在某次项目的实施上,发现从服务器Oracle数据库取过来的数据保存在客户端时中文显示有问题。遂使用SQL语句分别在服务器和客户端查询了下。
SELECT * FROM NLS_DATABASE_PARAMETERS;
得到
服务器:NLS_CHARACTERSET=US7ASCII;
客户端:NLS_CHARACTERSET=AL32UTF8;
后BaiDu说将服务器和客户端含中文的字段'str_1'改为
服务器:utl_raw(cast_to_raw("str_1"))
客户端:utl_raw(cast_to_varchar2("str_1"));
但是还是不行,在客户端上中文字符还是不对。
后来想到convert()函数。
CONVERT(c1,set1,set2)
【功能】将源字符串c1 从一个语言字符集set2转换到另一个目的set1字符集
【参数】c1,字符串,set1,set2为字符型参数
【返回】字符串
因为Oracle任何版本的数据库都可以将字符类型转换成'ZHS16GBK'类型。可以先将服务器的转换过后的字符串编码从'US7ASCII'转换成'ZHS16GBK',
在客户端将'ZHS16GBK'类型的字符串从'ZHS16GBK'类型再转换成'UTF8'。代码如下:
服务器
convert(utl_raw.cast_to_raw(str_1),'ZHS16GBK','US7ASCII');
客户端
convert(utl_raw.cast_to_VARCHAR2(str_1),'UTF8','ZHS16GBK');
这样就可以访问到服务器的中文字符内容了!
本文介绍了如何使用Oracle的CONVERT函数解决US7ASCII与UTF8字符编码问题,允许从US7ASCII字符集转换到UTF8,以便正确显示中文字符。
4378

被折叠的 条评论
为什么被折叠?



