1. 程式人生 > >ORACLE字符集“ALU32UTF8”更改成“ZHS16GBK”

ORACLE字符集“ALU32UTF8”更改成“ZHS16GBK”

源連結:http://blog.csdn.net/fffygapl/article/details/7432501

在安裝ORACLE的時候,預設字符集為ALU32UTF8,如果需要更好的支援中文,建議字符集更改成“ZHS16GBK”,如果想不重新安裝資料庫的話,只有更改資料庫字元集了。

1、檢視資料庫伺服器的字符集

有很多種方法可以查出oracle server端的字符集,比較直觀的查詢方法是以下這種:

SQL>select userenv('language') from dual;

結果類似如下:AMERICAN_AMERICA.AL32UTF8

其他方法:

select * from NLS_database_PARAMETERS  

select * from props$

2、檢視客戶端字元集合

在windows平臺下,就是登錄檔裡面相應OracleHome的NLS_LANG。還可以在dos窗口裡面自己設定,比如:

  set nls_lang=AMERICAN_AMERICA.ZHS16GBK

  這樣就隻影響這個窗口裡面的環境變數。

  在unix平臺下,就是環境變數NLS_LANG。

  echo $NLS_LANG

  AMERICAN_AMERICA.ZHS16GBK

  如果檢查的結果發現server端與client端字符集不一致,請統一修改為同server端相同的字符集

3、更改伺服器端資料庫字符集

     oracle的字符集有互相的包容關係。如us7ascii就是zhs16gbk的子集,從us7ascii到zhs16gbk不會有資料解釋上的問題,不會有資料丟失。在所有的字符集中utf8應該是最大,因為它基於unicode,雙位元組儲存字元(也因此在儲存空間上佔用更多)。  一旦資料庫建立後,資料庫的字符集理論上講是不能改變的。因此,在設計和安裝之初考慮使用哪一種字符集十分重要。根據Oracle的官方說明,字符集的轉換是從子集到超集受支援,反之不行。如果兩種字符集之間根本沒有子集和超集的關係,那麼字符集的轉換是不受oracle支援的。對資料庫server而言,錯誤的修改字符集將會導致很多不可測的後果,可能會嚴重影響資料庫的正常執行,所以在修改之前一定要確認兩種字符集是否存在子集和超集的關係。一般來說,除非萬不得已,我們不建議修改oracle資料庫server端的字符集。特別說明,我們最常用的兩種字符集ZHS16GBK和ZHS16CGB231280之間不存在子集和超集關係,因此理論上講這兩種字符集之間的相互轉換不受支援。

    修改步驟如下:

SQL> shutdown immediate;
資料庫已經關閉.
已經解除安裝資料庫.
ORACLE例程已經關閉.
SQL> startup mount
ORACLE例程已經啟動.
Total System Global Area 235999352 bytes
Fixed Size 450680 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
資料庫裝在完畢.
SQL> alter system enable restricted session;

系統已更改.

SQL> alter system set ob_queue_processes=0;

系統已更改.


SQL> alter database open;

資料庫已更改.

SQL> alter database character set zhs16gbk;
alter databasecharacter set zhs16gbk
*
第一行出現錯誤:
ORA-12712
新字符集必須為舊字符集的超集
SQL> Alter DATABASE character set INTERNAL_USE zhs16gbk;-----使用INTERNAL_USE可以跳過超集的檢查

資料庫已更改.
SQL> shutdown immediate;
資料庫已經關閉.
已經解除安裝資料庫.
ORACLE例程已經關閉.
SQL> STARTUP
ORACLE例程已經啟動.
Total System Global Area 235999352 bytes
Fixed Size 450680 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢.
資料庫已經開啟.
SQL> 
經過以上步驟,伺服器的字符集成功被修改成為zhs16gbk;