1. 程式人生 > >【不錯】淺析Oracle三層全球化支援(NLS)

【不錯】淺析Oracle三層全球化支援(NLS)

NLS_LANGUAGE影響oracle錯誤訊息等在客戶端中由oracle資料庫(軟體)服務端發來的要顯示的訊息(而非客戶端本身所要顯示的資訊),再如splplus中的“表已建立、連線到”等顯示的資訊就是如此。NLS_LANGUAGE不影響表中(所有)資料的顯示,具體的說,就是不影響表中varchar2/charnvarchar2/nchar欄位的資料的顯示(,還有顯示日期型別的表字段)。

而表中varchar2/charnvarchar2/nchar欄位的資料的顯示由NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET決定,即NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET

用於表示Oracle在儲存varchar2/charnvarchar2/nchar欄位時的儲存型別。

NLS_DATA_LANGUAGE用來表示Oracle在顯示日期型別的(的表字段裡的)文字內容時,使用什麼語言(的字元)。

至於NLS_LANGUAGE用什麼字符集由oracle資料庫軟體決定(根據NLS_LANGUAGE所指定的語言,oracle資料庫軟體服務端選擇該語言下的一個字符集),而NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET則可以由oracle使用者來自定義。

NLS引數最終被覆蓋的值為oracle資料庫(軟體)服務端所用?

客戶端的環境變數nls_lang 

NLS_LANG引數由以下部分組成:

NLS_LANG=<Language>_<Territory>.<ClientsCharacterset>

所以,客戶端的nls_lang設定後會覆蓋影響oracle資料庫(軟體)服務端nls架構模組功能程式中的session level的以下三個引數變數的數值:

NLS_LANGUAGE                  AMERICAN

NLS_TERRITORY                 AMERICA

NLS_CHARACTERSET

session level的NLS引數應該存放在各個UGA中。

客戶端都是基於服務端程式提供的介面(來訪問操作服務端程式的)而開發出來的,所以客戶端是否需要某個環境變數是取決於服務端程式是否要用到該變數。故而,在其他非基於oracle資料庫(軟體)服務端程式提供的介面而開發出來的客戶端是不需要用到環境變數nls_lang的。

除了NLS_CHARACTERSET變數外的NLS變數,都是以session level的該NLS引數值為準來控制顯示結果。而NLS_CHARACTERSET變數則貌似要客戶端和資料庫端配合來控制顯示結果?

Session Level NLS Parameter和客戶端nls環境變數集合(存在於登錄檔中)如nls_lang是兩套不同的變數集合。這個從select * fromnls_session_parameters;中不存在NLS_CHARACTERSET一行,而客戶端環境變數nls_lang裡有NLS_CHARACTERSET,而可知。

Database Level NLS ParameterInstanceLevel NLS ParameterSession Level NLS Parameter間類似於類繼承關係。NLS_CHARACTERSETDatabaseLevel NLS Parameter的私有成員變數,不可被Session Level NLS Parameter繼承訪問。當然,在Session Level裡可以被繼承訪問的那些NLS Parameter的值在最終local化裡起作用(,而不是Database Level或是Instance Level NLS Parameter的值)。

如果使用者設定了某一客戶端nls環境變數如nls_lang,則其值就會自動賦值給Session Level NLS Parameter裡相應的NLS引數。

由於NLS_CHARACTERSET變數在Session Level裡不存在的,所以客戶端環境變數nls_lang裡的NLS_CHARACTERSET是要和Database Level NLS Parameter NLS_CHARACTERSET一起配合共同起作用。

即凡是Session Level裡不存在的變數,客戶端環境變數裡的該同名變數都是要和Database Level NLS Parameter該同名變數一起配合共同起作用。

凡是Session Level裡存在的變數,則由其單獨起作用。

altersession set NLS_CHARACTERSET 提示 ora_000922missing orinvaild option

說明NLS_CHARACTERSET不可在會話級別被修改。


 select userenv('language') from dual;

和selectsys_context('userenv','language') from dual;都是顯示 session Level NLS Parameter的值,其中就有NLS_CHARACTERSET的值,所以說明NLS_CHARACTERSETDatabase Level NLS Parameter的私有成員變數,被SessionLevel NLS Parameter繼承卻不可訪問(即不可被修改)。

 selectuserenv('lang') from dual;顯示 session Level NLS Parameter NLS_LANGUAGE的值。

NLS_LANGUAGE                  AMERICAN

NLS_TERRITORY                 AMERICA

NLS_CHARACTERSET

這三個引數是相互獨立的,即其各自影響的資料不會有重合部分。

客戶端nls_lang裡的字符集,對在客戶端裡輸入的SQL語句文字(的編碼值),會將其當作是客戶端nls_lang裡的字符集編碼的編碼值來解釋解析,而不會對其編碼值進行轉碼為客戶端nls_lang裡的字符集編碼的編碼值。例如,輸入的SQL語句文字的編碼值(客戶端字符集,作用的地方(?))採用的是ZHS16GBK字符集的,而客戶端nls_lang裡的字符集為AL32UTF8時,執行該SQL語句,提示ora911:無效字元,說明未轉碼。

客戶端nls_lang裡的字符集、客戶端字符集是兩個不同的變數,都是屬於客戶端的。

客戶端環境變數nls_lang指定無效值,如寫個無效的字符集名時,提示

ORA-12705:Cannot access NLS data files or invalid environment specified

NLS_LANG值,則會根據所在伺服器作業系統的配置內容,為我們選擇出一個字符集


相關推薦

不錯淺析Oracle全球化支援NLS

NLS_LANGUAGE影響oracle錯誤訊息等在客戶端中由oracle資料庫(軟體)服務端發來的要顯示的訊息(而非客戶端本身所要顯示的資訊),再如splplus中的“表已建立、連線到”等顯示的資訊就是如此。NLS_LANGUAGE不影響表中(所有)資料的顯示,具體的說,就是不影響表中varchar

TensorFlowTensorFlow 的多感知器MLP

前面有幾篇博文講了使用 TensorFlow 實現線性迴歸和邏輯斯蒂迴歸,這次來說下多層感知器(Multi-Layer Perceptron)的 TensorFlow 實現。 本篇博文的程式碼及結果圖片等可以在這裡下載,裡面包含TensorFlow的實現和sk

ShiroApache Shiro架構之身份認證Authentication

trac pretty asm 安全保障 軟件測試 釋放 model tac 讀取配置文件 Shiro系列文章: 【Shiro】Apache Shiro架構之權限認證(Authorization) 【Shiro】Apache Shiro架構之集成web

整理軟件工程復習提綱維護

評價 描述 nbsp 參考 操作 text 吸引 復習 組織 章魚小年糕整理,如果有錯誤歡迎提出,若要二次修改發布,請留言,謝謝^_^! 概念 軟件維護:軟件在已經交付使用之後,為了改正錯誤或滿足新的需求修改軟件的過程。 文檔:有關計算機程序功能、設計、編制、使用的文字或圖

fetch跨域請求附帶cookiecredentials

allow src ssi ann oct o-c ech .com 頭部 HTTP訪問控制 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS 解決跨域的方式有很多種,本文介紹“跨域請

gulp前端自動化工具---gulp的使用------凡塵

app 一起 dex 前端自動化 指定 sass css 文件的 等待 什麽是gulp? 基於node的自動化構建工具 擴展:開發的時候分為2個節點一個是開發階段 另一個是部署階段 開發階段:源文件不會被壓縮

201803122018年03月12日隨想

post 而是 有一個 然而 clas OS you pos 一個 今天有一個熱點事件,在幾個群裏都有提及。 我以為是假的。沒想到是真的。果然還是太young了。 總結: 有的事,你認為是假的,它是真的。比如今天的焦點事件。 有的事,你認為一定是假的,偏偏是真

PAT1135Is It A Red-Black Tree30

earch represent uno nbsp pac ber key strong 節點 There is a kind of balanced binary search tree named red-black tree in the data structure.

oracle -- ()數據段segment

pre roc clu extent 用戶 res part spa enabled 基本關系:數據庫---表空間---數據段---分區---數據塊數據段(segment)段(segment)由一系列的extent組成。通常一張表是一個segment。Oracle中的段可以

題解 bzoj1503: [NOI2004]郁悶的出納員 Splay

+= 地方 namespace 父親 noi down har str i++ bzoj1503,懶得復制,戳我戳我 Solution: 我知不知道我是那根筋抽了突然來做splay,調了起碼\(3h+\),到第二天才改出來(我好菜啊),當做訓練調錯吧 一個裸的splay,

linuxlinux 環境下 安裝禪道轉載 -- 跟web服務器無關,無視apache、nginx!!!

sdn php 修改 鏈接 net 壓縮 操作 tps 數據庫 參考文章 鏈接 :https://blog.csdn.net/xinxin19881112/article/details/46813991 講的非常完美、透徹,不像其他的文章,都是抄襲的,沒一點註意事項和自己

BZOJ2342: [Shoi2011]雙倍回文Manacher

manacher con spa 滿足 ans gin pac -i 代碼 題目 傳送門:QWQ 分析 (sb如我寫了發不知道什麽東西在洛谷上竟然水了84分 嗯咳 設$ i $為雙重回文的中心 如果$ j~i $ 可以被算作答案,只有滿足如下兩式

Verilog學習筆記簡單功能實現...............異步FIFO

另一個 gif 多個 可靠 基本原理 drs bar next 不同 基本原理: 1.讀寫指針的工作原理   寫指針:總是指向下一個將要被寫入的單元,復位時,指向第1個單元(編號為0)。   讀指針:總是指向當前要被讀出的數據,復位時,指向第1個單元(編號為0)

CodeforcesCF 467 C George and Jobdp

++ clas show mes ces -m col scanf tro 題目 傳送門:QWQ 分析 dp基礎題。 $ dp[i][j] $表示前i個數分成j組的最大和。 轉移顯然。 吐槽:做cf題全靠洛谷翻譯茍活。 代碼 1

Luogu 4777 模板擴展中國剩余定理EXCRT

name space return 同余 pan 自己 pre 圖片 是把 復習模板。 兩兩合並同余方程 $x\equiv C_{1} \ (Mod\ P_{1})$ $x\equiv C_{2} \ (Mod\ P_{2})$ 把它寫成不定方程的形式: $x =

BZOJ2563阿貍和桃子的遊戲貪心

include etc printf define += 桃子 space main efi 【BZOJ2563】阿貍和桃子的遊戲(貪心) 題面 BZOJ 題解 邊權平均分給兩個點就好了。 #include<iostream> #include<cstdi

BZOJ4391[Usaco2015 dec]High Card Low Card貪心

pac 前綴 ble cstring cst getc getch end != 【BZOJ4391】[Usaco2015 dec]High Card Low Card(貪心) 題面 BZOJ 題解 預處理前綴後綴的結果,中間找個地方合並就好了。 #include<i

LUOGU P4777 模板擴展中國剩余定理EXCRT

img lib display begin n) scan %d pen class 傳送門 解題思路 擴展 $crt?$,就是中國剩余定理在模數不互質的情況下,首先對於方程? $\begin{cases} x\equiv a_1\mod m_1\\x\equi

轉載基於rasa的對話系統搭建

生成模型 efi 實體類 total ted twisted -m serve feature 文章介紹使用rasa nlu和 rasa core 實現一個電信領域對話系統demo,實現簡單的業務查詢辦理功能,更完善的實現需要

iOS日曆行程的增刪改查完整

前言 我們可以使用系統提供的EventKit框架來訪問和操作使用者的日曆日程和提醒(雖然日曆和提醒是兩個獨立的app,但是是用同一個框架來處理資料)。同樣地,日曆和提醒的資料的資料,都是儲存在同一個叫做Calendar Database的資料庫中: EventKit不僅能獲