客戶端字符集環境select * from NLS _實例_參數,派生自v $參數,
表示客戶端字符集的設置,可能是參數文件、環境變量或註冊表。
會話字符集環境select * from nls _ session _ parameters,來自v$nls_parameters,表示會話本身的設置,可能是會話的環境變量,也可能是alter session的完成。如果會話沒有特殊設置,將與nls_instance_parameters壹致。
客戶端的字符集應該與服務器的字符集壹致,以便正確顯示數據庫的非Ascii字符。如果存在多個設置,請更改會話>:環境變量>註冊表>參數文件
字符集是壹致的,但是語言設置可以不同。語言設置建議使用英語。如果字符集是zhs16gbk,nls_lang可以是American _ America。ZHS 16GBK。
字符集涉及三個方面,
1.oracel服務器字符集;
2.Oracle客戶端的字符集;
3.DMP文件的字符集。
導入數據時,三種字符集需要保持壹致才能正確導入。
2.1查詢oracle服務器的字符集
查找oracle服務器字符集的方法有很多,比較直觀的查詢方法如下:
SQL & gt從dual中選擇userenv(' language ');
USERENV('語言')
-
簡體中文_中國。ZHS16GBK
SQL & gt從dual中選擇userenv(' language ');
美國航空公司。ZHS16GBK
2.2如何查詢dmp文件的字符集
oracle的exp工具導出的dmp文件也包含字符集信息,dmp文件的第二個和第三個字節記錄了dmp文件的字符集。如果dmp文件不大,比如只有幾米或者幾十米,可以用UltraEdit (16十六進制模式)打開,看看第二個和第三個字節的內容,比如0354,然後用下面的SQL找出它對應的字符集:
SQL & gt從dual中選擇nls _ charset _ name(to _ number(' 0354 ',' xxxx ');
ZHS16GBK
如果dmp文件很大,比如超過2G(這也是最常見的情況),可以用文本編輯器慢慢打開或者完全打開。您可以使用以下命令(在unix主機上):
cat exp . DMP | od-x | head-1 | awk“{ print $ 2 $ 3 }”| cut-c 3-6
然後使用上面的SQL就可以得到相應的字符集。
2.3查詢oracle客戶端字符集
在windows平臺下,是註冊表中OracleHome的NLS_LANG。也可以在dos窗口中自己設置。
例如:set nls _ lang = American _ America . zhs 16 gbk
這只影響該窗口中的環境變量。
在unix平臺下,它是環境變量NLS _朗。
$回聲$ NLS _朗
美國航空公司。ZHS16GBK
如果檢查結果顯示服務器和客戶端的字符集不壹致,請將其修改為與服務器相同的字符集。
補充:
(1).數據庫服務器字符集
select * from nls _ database _ parameters
從props$派生而來,它是壹個表示數據庫的字符集。
(2).客戶端字符集環境
select * from nls _ instance _ parameters
它來自v$parameter,表示客戶端字符集的設置,可能是參數文件、環境變量或者註冊表。
(3)會話字符集環境
select * from nls _會話_參數
派生自v$nls_parameters,表示會話本身的設置,可能是會話的環境變量,也可能是alter session的完成。如果會話沒有特殊設置,將與nls_instance_parameters壹致。
(4)客戶端的字符集要和服務器端的字符集壹致,這樣才能正確顯示數據庫的非Ascii字符。
如果存在多個設置,則NLS函數的優先級:SQL函數>;更改會話& gt環境變量或註冊表>;參數文件>數據庫默認參數
字符集是壹致的,但是語言設置可以不同。語言設置建議使用英語。如果字符集是zhs16gbk,nls_lang可以是American _ America。ZHS 16GBK。