1、Linux 下修改 oracle 的字符集:WE8ISO8859P1 修改为 ZHS16GBK 2011-04-08 11:04277 人阅读评论(0)收藏举报问题描述:同事在 Linux 下安装的 oracle,默认的字符集没有修改,使用的是WE8ISO8859P1,不能够支持中文,问题表现为,客户端录入的中文数据可以显示,提交之后再查询出来后中文会显示为?。问题出在 oracle 服务端的字符集不支持中文导致。可以通过:select userenv(language) from dual; 命令可以查看服务端的使用的字符集。或者 select * from V$NLS_PARAMETERS
2、;命令也可以以及 select * from SYS.PROPS$;确定了问题后就 Google 了一下,网上倒是有很多这方面的资料。可能是自己的环境和他们的不一致的原因,按照网上的那些步骤我的问题没有解决。问题根源找到了就好解决了,参考着网上的资料自己的解决步骤如下:总的来说有两个思路:1、重新安装2、修改字符集注:第一个方法没有用,觉得重装不是我喜欢的道道,解决问题是根本。所以我选择的是第二种方式。网上很多人说,oracle 服务端安装好了之后字符集是不可以更改的,实践证明是可以修改的,至少 oracle8 以上的版本都是可以修改的。我的解决步骤:1、ssh 登录,切换到 oracle 用
3、户切换用户命令: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
4、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 r
5、estrict 下运行第七步的命令。以下是我的调试命令记录,大家可以参考一下,那些提示错误的命令都是执行失败的,可以不必管。SQL conn /as sysdbaConnected.SQL shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL startup mountORACLE instance started.Total System Global Area 285212672 bytesFixed Size 1218992 bytesVariable Size 104859
6、216 bytesDatabase Buffers 176160768 bytesRedo Buffers 2973696 bytesDatabase 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.-这是按照
7、网上的步骤执行,但是命令都执行失败,所以这些命令对我的环境来说是不行的SQL alter database character set ZHS16GBK;alter database character set ZHS16GBK*ERROR at line 1:ORA-12712: new character set must be a superset of old character set-我也尝试了换用其它的字符集,也是不行,同样报错SQL alter database character set AL32UTF8;alter database character set AL32UT
8、F8*ERROR at line 1:ORA-12712: new character set must be a superset of old character set-至此网上的步骤调试失败,所以我继续查资料,又进行了如下的调试SQL shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL startup restrictORACLE instance started.Total System Global Area 285212672 bytesFixed Size 121
9、8992 bytesVariable Size 113247824 bytesDatabase Buffers 167772160 bytesRedo Buffers 2973696 bytesDatabase mounted.Database opened.-一开始我是用的是如下的命令,结果失败SQL alter database character set simplified chinese_china.zhs16gbk;alter database character set simplified chinese_china.zhs16gbk*ERROR at line 1:ORA-0
10、0933: SQL command not properly ended-我尝试了两次,改成大写也不行,SQL alter database character set simplified CHINESE_CHINA.ZHS16GBK;alter database character set simplified CHINESE_CHINA.ZHS16GBK*ERROR at line 1:ORA-00933: SQL command not properly ended-最后,我使用了这命令,提示执行成功,之后通过测试中文乱码问题解决SQL alter database character
11、 set INTERNAL_USE ZHS16GBK;Database altered.SQL shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL startupORACLE instance started.Total System Global Area 285212672 bytesFixed Size 1218992 bytesVariable Size 113247824 bytesDatabase Buffers 167772160 bytesRedo Buffers 2973696 bytesDatabase mounted.Database opened.SQL