运行环境:
- 系统架构:C/S
- PowerBuilder版本:V11.5
- ORACLE版本:11G
- 曦航老袁
最近,由于业务上的原因需要对ORACLE数据库进行数据写入,却发现其中的中文数据都变成了“乱码”。为了解决这一问题,在网上查阅了一些资料,才知道这个问题出现的频率还真是很高。主要的原因是由于客户端与ORACLE数据库使用了不同的字符集标准造成的。通常,PowerBuilder本身并没有对字符集的设置,使用的是本机的默认字符集,二者标准不同就会产生乱码的现象。
找到了原因该如何解决呢?
首先ORACLE数据库只有一套,它的标准安装后是不会轻易改变的,我们必须查明ORACLE数据库使用的是什么字符集。在此我采用了网上很多人均采用的方法,使用SqlPlus工具或者PL/SQL工具,登录ORCALE数据库,并执行以下语句:
SELECT userenv('language') FROM dual;
如此就获取了ORCALE数据库当前使用的字符集,我获得的结果是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
其次,PowerBuilder的应用程序由于是网络版的原因,安装环境就比较复杂,运行在多种操作系统和版本之下,字符集很难统一,即使统一了也难免出现后续增加新网点的情况。曾经在网上看到通过修改本机系统环境配置变量的方法解决了这一问题,但在网络环境下却存在着不少弊端。于是试想如果能够通过PowerBuilder的连接串中指明数据库的字符集,对ORACLE的读写应该可以达到统一的目的。
于是,打开PowerBuilder编程环境,选择DB profile配置功能,在O10 Oracle 10g下新建一个连接,在弹出的配置窗口中,选项System页,如图所示:
在窗口中有一个明显的字符集配置的选项,向其中写入前面查询到的字符集内容:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,或者直接修改连接参数:SQLCA.DBParm = "NLS_Charset='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'"。
使用新的连接串连接ORACLE数据库重新写入数据,中文数据全部显示正常,到此问题得到解决。