看了網上的文章,亂碼有以下幾種可能
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.[quote]如果oracle 與作業系統的字元集一緻,查詢時,就直接從oracle中把資料讀出來,直接傳回給使用者,插入時,直接插入到資料庫。
但是如果不一緻的話,會将資料庫中的資料轉換成作業系統的字元集,傳回給使用者。插入時一樣,就會将資料先做個轉換,然後在插入到資料庫。[/quote]
網上的人是這麼說的,但具體的我也沒試。我有時間試一下,看是不是他所說的那樣。
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裡邊建立個表,然後在插入中文,檢視一下,應該是對的。
這樣就解決了亂碼問題。 中間還有許多的問題,自己在慢慢研究吧。