一、问题描述
使用select * from scott.invoice的结果,发现中文字段都是“????”,而英文字段和数字都正常。
二、原因分析
这是因为服务器端的字符集和客户端的字符集不一致或者机器的字符集和客户端字符集不一致导致的。
所以只要让字符集一致(以服务器端字符集为主)就OK了。
三、解决方案:
1.检查服务器编码:
select * from v$nls_parameters;
我们可以看到:
语言是SIMPLIFIED CHAINESE,字符集为ZHS16GBK。如果NLS_LANGUAGE是AMERICAN,可以通过以下语句修改:
alter system set nls_language='SIMPLIFIED CHINESE' scope=spfile;
然后重启数据库服务即可。
2.设置本地客户端编码:
进入 我的电脑,属性,高级,环境变量,添加2项:
LANG=zh_CN.GBK
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
然后再次进入PL/SQL,查询就可以发现不是乱码了。
如果是客户端和机器的字符不一致,要修改机器的字符集编码可以进入注册表修改:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0
"NLS_LANG"值改为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
参考文献:
http://blog.csdn.net/zftang/article/details/6586524