PL/SQL远程连接ORACLE中文乱码解决

时间:2024-03-31 15:39:34

PL/SQL远程连接ORACLE中文乱码解决

这几天开始使用oracle,本人是win10操作系统,远程连接的虚拟机中xp系统的oracle10g,结果好不容易连接上了,又出现了乱码问题,照着网上的都试了就是没用,后来终于发现了原因所在.
以后还是要注意细节,避免走弯路.

问题

PL/SQL工具连接后,插入语句,中文显示???乱码

确定原因

①select userenv(‘language’) from dual;
PL/SQL远程连接ORACLE中文乱码解决
先查询数据库的字符集,

PL/SQL远程连接ORACLE中文乱码解决
然后再查看注册表,将上图的属性修改为AMERICAN_AMERICA.ZHS16GBK

由于我是远程连接,所以我在我的虚拟机的xp系统中修改环境变量,添加系统变量
变量名:NLS_LANG 变量值:AMERICAN_AMERICA.ZHS16GBK

重启PL客户端.如果你看到之前的数据还是乱码,先编辑数据写上几个中文试试,保存之后如果又变成乱码那恭喜你失败了.

继续解决

在PL/SQL中的工具栏上点击帮助–点击最下面的支持信息info–翻到Character Sets

PL/SQL远程连接ORACLE中文乱码解决如果发现你的NLS_LANG: 为空,那么你的PL并没有将编码应用到这里,或者红色与蓝色框框中内容不一致时你需要在sqlplus中设置编码.

设置编码

sql> conn / as sysdba;
sql> shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
sql> startup mount;
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
sql> alter system enable restricted session;
system altered.
sql> alter system set job_queue_processes=0;
system altered.
sql> alter system set aq_tm_processes=0;
system altered.
sql> alter database open;
database altered.
sql> alter database character set internal_use JA16SJIS ;
sql> shutdown immediate;
sql> startup;

注意,上面的删除线部分需要填写你在上面①中查询到的内容,的最后编码部分,如ZHS16GBK

最后,重启PL工具,还是进去这回可以先看看帮助中的注册信息,如果NLS_LANG: 有值了,且编码和蓝色框中对应上了,基本就没问题了.