ここから本文です

ORACLE11g R2のNLS_LANGのクライアント環境とサーバー環境での優先順位について教...

igarappiさん

2011/10/3117:32:48

ORACLE11g R2のNLS_LANGのクライアント環境とサーバー環境での優先順位について教えてください。

基本情報

サーバー環境
OS:Windows2008Server 64bit
DB:Oracle11gR2
※初期化パラメーターのNLS_LANGは、デフォルトのままのため、AMERICANになっています。

クライアント環境
OS:WindowsXp 32bit
DB:クライアント用のCDを利用して、Instant Clientをインストール

上記の環境で、
サーバー環境で、データベースに接続して、
SELECT * FROM V$NLS_PARAMETERS;
で、NLS_LANGを確認すると、JAPANESEになり、
クライアント環境で、上記と同じ手順で、
NLS_LANGを確認すると、AMERICANになります。

こういった違いは、なぜ発生するのでしょうか?

ちなみに、サーバー、クライアントともに、環境変数に、
NLS_LANGの設定はしていません。

また、クライアント環境に、
サーバー用のCDを利用して環境を作成して、
NLS_LANGを確認すると、JAPANESEに変わりました。

補足NLS_LANGと、NLS_LANGUAGEを間違えました。

回答いただいた皆様、申し訳ありません。

下記の順番でNLS_LANGの優先順位になっているのは、把握しております。
1. SQL関数での明示的な設定
2. ALTER SESSION文による設定
3. 環境変数としての設定
4. 初期化パラメータ・ファイル内での指定
5. デフォルト

閲覧数:
24,031
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

2011/11/100:36:29

まず、初期化パラメータにもV$NLS_PARAMETERSにもNLS_LANGはありません。
NLS_LANGUAGEのことかと思います。
NLS_LANGは環境変数です。

> こういった違いは、なぜ発生するのでしょうか?
NLS_LANG環境変数によって上書きされているためです。

V$PARAMETERSで確認できるNLS_LANGUAGEは”言語”がどれなのかを指定します。
言語の設定は、文字列のソート結果等に影響します(その言語の辞書順にソートする、など)。
V$PARAMETERにはNLS_TERRITORYという項目もあったかと思います。これは地域を指します。
地域の設定は、日付の書式等に影響します(「11月」とするか「Nov」とするか等)。

言語、地域は初期化パラメータNLS_LANGUAGE、NLS_TERRITORYで指定することができますが、クライアントごとに変化させることができるべきものです。
例えば、同じデータでも東京本社では"2011年11月01日"と表示させ、ニューヨーク支社では"01Nov,2011"と表示させたい、などの要望があるかと思います。
そのため、NLS_LANGUAGEやNLS_TERRITORYはNLS_LANG環境変数で上書きすることができます。

試しに、同じクライアントからNLS_LANG環境変数を明示的に設定してV$NLS_PARAMETERSを確認してみてください。
設定値が反映されて変化することがわかるかと思います。

例、
SET NLS_LANG=Japanese_Japan.JA16SJIS
SET NLS_LANG=American_America.JA16SJIS
SET NLS_LANG=French_France.JA16SJIS

なお、NLS_LANGは勿論、NLS_LANGUAGEもNLS_LANGもDB内のデータには影響しません。
クライアントでの見た目を変えるだけです。

設定の優先順位は次の通りです。
1. ALTER SESSION文での設定値
2. NLS_LANG環境変数の設定値
3. NLS_LANGUAGE、NLS_TERRITORY初期化パラメータの設定値
4. American_America.US7ASCII
※1.が最優先、4.はどこにも何も設定されなかった場合のデフォルト値

言語、地域、キャラクターセットはユーザー(オペレータ)が直接見る画面上にどう表示したいか、によってクライアント側で適切に設定する必要があります。

質問した人からのコメント

2011/11/1 12:03:08

降参 まとまらない、質問をあげてしまい。
申し訳ありません。
一回質問を閉じさせていただき、改めて、質問をあげさせていただきます。

よかったら、回答をお願いします。

ベストアンサー以外の回答

1〜1件/1件中

jho********さん

2011/10/3121:27:06

まずはっきりしときたいことがあります。

NLS_LANGは、オラクルクライアントの設定です。
たとえサーバでも、データベースへ接続するためのツールがあり、それはデータベースのソフトウェアからするとクライアントになります。このクライアントソフトの言語設定が、NLS_LANGです。

NLS_LANGは環境変数に設定していないとのことですが、Windows版の場合、環境変数に設定されていない場合、レジストリの値が採用されます。(HKLM¥Software¥ORALCEの下のどこか)たぶんこちらには設定があるのではないでしょうか?

ちなみに、データベースの言語設定は、データベースを作成時に指定します。(たぶん、デフォルトでは、AL32UTFだったと思います。)つまり、データベースには多言語でデータを保存し、クライアント側で、表示形式を日本語や英語形式に変換し表示しているわけです。(一番わかり易い違いは、日付の書式や曜日の表示ですね。)

なぜ、Instant ClientでAmericanになるのかはわかりませんが、レジストリで新しく設定することをお勧めします。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる