看了網上的文章,亂碼有以下幾種可能
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裏邊創建個表,然後在插入中文,查看一下,應該是對的。
這樣就解決了亂碼問題。 中間還有許多的問題,自己在慢慢研究吧。
============================================================