问题描述:同事在Linux下安装的Oracle,默认的字符集没有修改,使用的是WE8ISO8859P1,不能够支持中文, 问题表现为,客户端录入的中文数据可以显示,提交之后再查询出来后中文会显示为???。问题出在oracle服务端的字符集不支持中文导致。 可以通过: select userenv('language') from dual; 命令可以查看服务端的使用的字符集。 或者select * from V$NLS_PARAMETERS;命令也可以 以及 select * from SYS.PROPS$; 确定了问题后就Google了一下,网上倒是有很多这方面的资料。可能是自己的环境和他们的不一致的原因,按照网上的那些步骤我的问题没有解决。 问题根源找到了就好解决了,参考着网上的资料自己的解决步骤如下: 总的来说有两个思路: 1、重新安装 2、修改字符集 注:第一个方法没有用,觉得重装不是我喜欢的道道,解决问题是根本。所以我选择的是第二种方式。 网上很多人说,oracle服务端安装好了之后字符集是不可以更改的,实践证明是可以修改的,至少oracle8以上的版本都是可以修改的。 我的解决步骤: 1、ssh登录,切换到oracle用户 切换用户命令:su -oracle 之后用sqlplus登录oracle,命令: :sqlplus /nolog :connect /as sysdba 这样就登录了。 2、更改字符集 首先 sqlplus登录后,关闭oracle数据库 1.shutdown immediate ; 2.startup mount ; 3.alter system enable restricted session ; 4.alter system set JOB_QUEUE_PROCESSES=0; 5.alter system set AQ_TM_PROCESSES=0; 6.alter database open ; 7. alter database character set INTERNAL_USE ZHS16GBK; 8.shutdown immediate ; 9.startup ; 注:一开始我按照上面的步骤没有解决,因为在第7步的时候有的资料提示使用alter database character set ZHS16GBK;我试过,这个命令不行,我使用的是alter database character set INTERNAL_USE ZHS16GBK; 提示修改成功。同样,如果在startup mount 下命令提示error的话,可以尝试在startup restrict下运行第七步的命令。 以下是我的调试命令记录,大家可以参考一下,那些提示错误的命令都是执行失败的,可以不必管。 SQL> conn /as sysdba Connected. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 285212672 bytes Fixed Size 1218992 bytes Variable Size 104859216 bytes Database Buffers 176160768 bytes Redo Buffers 2973696 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.