2011-12-28 59 views
2

據現場, http://www.dba-oracle.com/t_nls_lang.htm選擇NLS_LANG爲Oracle

問題。我無法理解這是如何可能的。從網站引用 :

例如,假設數據庫字符集是AL32UTF8,該 客戶端是一個英文Windows操作系統,並在客戶端NLS_LANG 設置爲AL32UTF8。 進入數據庫的數據是 編碼在WE8MSWIN1252中,並且未被轉換爲AL32UTF8數據 ,因爲客戶端上的NLS_LANG設置與數據庫 字符集匹配。因此,Oracle假定不需要轉換, 和無效數據輸入到數據庫中。

當客戶端編碼爲AL32UTF8時,數據如何作爲WE8MSIN1252進入數據庫?

回答

6

由於操作系統本身使用其他字符集(本例中爲WE8MSIN1252)。但是由於NLS_LANG(在客戶端)設置爲AL32UTF8,因此Oracle不知道這一點。 Oracle始終使用NLS_LANG中的值並忽略系統設置,而(幾乎)所有其他軟件都使用操作系統設置。

因此,要解決此問題,本地(客戶端)NLS_LANG必須與OS字符集相同。或者(其他選項)客戶端上運行的軟件必須自行重新編碼字符。

+0

如果我正確理解,數據傳輸應該是這樣的:客戶端 - >服務器(Oracle託管)操作系統 - > Oracle(DB)。你是否暗示這一點?我以前認爲數據直接來自客戶端 - > Oracle(DB),因此會產生混淆。 – digdug 2011-12-28 15:04:12

+0

很高興知道!謝謝你的提示! – fge 2011-12-28 15:13:45

+0

不,數據流是:客戶端軟件(使用OS編碼) - > oracle客戶端驅動程序(使用NLS_LANG) - > oracle數據庫服務器(使用NLS_LANG) – werewindle 2011-12-28 15:51:33