日期:2014-05-16 浏览次数:20526 次
看了网上的文章,乱码有以下几种可能 
1. 操作系统的字符集 
2.oracle server的字符集 
3.客户端的字符集 
1. 查看oracle的字符集 
?? 
select userenv('language') from dual
2.在Ubuntu中.bashrc 中加入下边的话: 
?? export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK(改掉操作系统的字符集) 
Oracle? NLS_LANG Oracle 
3. 
? 网上的人是这么说的,但具体的我也没试。我有时间试一下,看是不是他所说的那样。 
4.修改Oracle的编码和操作系统的一样。(参考别人的) 
登陆用dba 
SQL> conn sys/sys as sysdba; 
停掉数据库 
SQL>shutdown immediate; 
启动数据库到mount状态下 
SQL> STARTUP MOUNT;
ORACLE instance started. Total System Global Area 76619308 bytes Fixed Size 454188 bytes Variable Size 58720256 bytes Database Buffers 16777216 bytes Redo Buffers 667648 bytes Database mounted.
SQL> ALTER SESSION SET SQL_TRACE=TRUE; 
Session altered. 
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; 
设置字符集 
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; 
先把数据库中的有中文乱码的清空了。 
然后在执行。这是有可能报错 
执行这个ALTER DATABASE character set INTERNAL_USE ZHS16GBK 
跳过字符集检查 
关闭数据库 
SQL> Shutdown immediate; 
重启 
SQL> startup; 
做完之后在sqlplus里边试一下,应该就好了,但是在pl/sql里边一看还是乱码, 
最后,在pl/sql里边创建个表,然后在插入中文,查看一下,应该是对的。 
这样就解决了乱码问题。 中间还有许多的问题,自己在慢慢研究吧。