以下是我在实际工作中遇到这种问题的解决方法:
1.假如服务器的字符集为WE8ISO8859P1,如果不知道是什么字符集,在PL/SQL中可输入
select * from V$NLS_PARAMETERS, 在下方就可看到如下信息:
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
.....
NLS_CHARACTERSET ZHS16GBK
.....
可知道字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK.
如果是想查看客户端oracle字符集,则在SQL PLUS下输入select userenv('language') from dual;
就可知道客户端oracle字符集.
2.如果连接服务器数据库的字符集为AMERICAN_AMERICA.WE8ISO8859P1,
(1) 新建系统环境变量: NLS_LANG, 值为AMERICAN_AMERICA.WE8ISO8859P1,
(2) 打开注册表, 在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG, 设NLS_LANG的值为 AMERICAN_AMERICA.WE8ISO8859P1;
(3) 再在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0, 设NLS_LANG的值为AMERICAN_AMERICA.WE8ISO8859P1.
重起PL/SQL, 即可.
如果字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK的, 方法同上.
如果用PL/SQL同时要打开不同字符集的数据库的话, 这种方法不行了, 哪位仁兄对oracle字符集有好的解决办法,一起讨论下吧.