场景描述:如果操作系统默认语种是英文(如英文版 Windows Server 2003, Enterprise Edition)的情形下安装了 Oracle 10g,可能导致 Oracle 安装后的数据库在 Compiere 应用程序中正确显示和保存中文,但 SQL Plus 或 PL/SQL Developer 等第三方应用程序连接到数据库中会看到乱码。
原因分析:此问题的原因是 Oracle Home 的 NLS_LANG 语言设置为 AMERICAN_AMERICA.AL32UTF8,从而使得 SQL*Net 使用了不匹配的字符集所致。换言之,数据库服务器引擎没有问题。
解决方法:修改注册表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1 下的 NLS_LANG 键值为操作系统当前默认语言即可(以简体中文为例:SIMPLIFIED CHINESE_CHINA.ZHS16GBK)。重新登录 SQL Plus 或 PL/SQL Developer 等第三方应用程序(无需重启数据库实例),即可显示和保存正确的中文字符。
其它说明:如果操作系统默认语种是与当前默认语言相同的最初情形下安装了 Oracle 10g,那么 Compiere 应用程序中的中文字符与 SQL Plus 或 PL/SQL Developer 等第三方应用程序连接到数据库中看到的中文字符均正确,不存在上述问题。Compiere 应用程序并不受此问题的干扰,可以完全正常使用。