在windows server下sqlplus连接自己的oracle数据库完全正常,但是我连接远程linux下的oracle,sqlplus中文显示就出问题了,总是显示“??”
这个问题又怎么解决呢?
经过多次测试和思考之后,找到问题的原因:
1、oracle服务器字符集不正确
2、客户端字符集不正确
最终的解决办法:
1、设置相应用户的环境变量NLS_LANG:
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
2、设置oracle服务器的字符集
alter database character set zhs16gbk;
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>startup mount;
ORACLE 例程已经启动。
Total System Global Area 2042241024 bytes
Fixed Size 1337548 bytes
Variable Size 1040189236 bytes
Database Buffers 989855744 bytes
Redo Buffers 10858496 bytes
数据库装载完毕。
SQL> alter system enable restricted session;
系统已更改。
SQL> alter system set job_queue_processes=0;
系统已更改。
SQL> alter system set aq_tm_processes=0;
系统已更改。
SQL>alter database character set internal_use zhs16gbk;
系统已更改。
<--我们看到这个过程和之前ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验. -->
SQL> select * from v$nls_parameters;
SQL> shutdown immediate;
SQL> startup
SQL> select * from v$nls_parameters;