字符集問題
Oracle多國語言設置是爲了支持世界範圍的語言與字符集,通常對語言提示, 貨幣形式,排序方式和 CHAR,VARCHAR2,C LOB,LONG 字段的數據的顯示等有效。ORACLE 的多國語言設置最主要的兩個特性就是國家語言設置與字符集設置,國家語 言設置決定了界面或提示使用的語言種類,字符集決定了數據庫保存與字符集有關數據(如文本)時候的編碼規則。
ORACLE字符集設定,分爲數據庫字符集和客戶端字符集環境設置。在數據庫端,
字符集在建立數據庫的時候設定,並保存在數據庫props$表中。
在客戶端的字符集環境比較簡單,主要就是環境變量或註冊表項 NLS_ LANG,注意 NLS_LANG的優先級別爲:參數文件<註冊表<環境變量<alter session.若是客戶端 字符集和服務器端字符集不同,並且字符集的轉換也不兼容,那麼客戶端的數據顯示與導出/導入的與字符集有關的數據將都是亂碼。
使用一點點技巧,就能夠使導出/導入在不一樣的字符集的數據庫上轉換數據。這裏須要一個2進制文件編輯工具便可,如 uedit32.用編輯方式打開導出的dmp文件,獲取 2 、3 字節 的內容 , 如 00 01 , 先把它轉換 爲 10 進制數,爲1 ,使用函數
NLS_CHARSET_NAME 便可得到該字符集:
SQL> select nls_charset_name(1) from dual; NLS_CHARSET_NAME(1)
------------------- US7ASCII
能夠知道該dmp文件的字符集爲 US7ASCII,若是須要把該 dmp文件的字符集換成ZHS16GBK,則須要用 NLS_CHARSET_ID 獲取該字符集的編號: SQL> select nls_charset_id('zhs16gbk') from dual; NLS_CHARSET_ID('ZHS16GBK')
--------------------------