Oracleセッションクライアントの文字セットを決定しますか?


9

データベースの文字セット(内)とクライアントの文字セット(クライアント環境設定)どのように相互作用するかを知っています。NLS_CHARACTERSETselect * from v$nls_parameters;NLS_LANG

しかし、私が見つけることができないのは、確立されたセッションについて、現在のクライアントの文字セットがOracleでどのように考えられているかをどのようにして判断できるかです。

これはまったく可能ですか?

注:(10g2の)文字セットは含まれSELECT * FROM NLS_SESSION_PARAMETERS;ませ

私が達成したいことを完全に明確にするために:

  1. NLS_LANGはクライアント環境で任意の値に設定されます(たとえばGERMAN_GERMANY.WE8MSWIN1252
  2. データベースアプリケーション[*]が起動し、Oracleデータベースへの接続/セッションを確立します。
  3. データベースアプリケーション[*]は、クライアントの文字セットがOracleが想定するものを(OS環境ではなく)Oracleに「質問」します

[*]:dbアプリケーションがsqlplusの場合、例は次のようになります。

...
sqlplus /nolog
connect user/pass@example
*magic command*;
   CLIENT CHARACTERSET = ...

ジャックの彼の答えのメモは、2つの重要なポイントを提起します。

  • Oracleでは、が文字セットの変換を行いますか。それはクライアントライブラリコードですか、それともサーバー側で行われますか?
  • それがクライアントであるように見えるので、クライアントはこの設定を公開する必要があります-クライアントlib / toolがこの設定を想定しているもの。この設定の内容を照会できるOracleクライアントlibs / tools(sqlplus、OCI / OCCI、Pro * Cなど)はありますか?

回答:


9

これがまさにあなたが探しているものであることは少し疑わしいですが、

host echo %nls_lang%;

ENGLISH_UNITED KINGDOM.WE8ISO8859P1

は、クライアントのクライアントnls_lang環境変数を示しています。

私はサーバーがクライアント側でどのような変換が行われたかを認識していないため、「現在の」設定を与えるために実行できるSQLクエリはないと思います。現在の設定を表示するコマンドはすべてネイティブでなければなりません。クライアントに-上記のコマンドにSQL Developerを使用しましたが、SQL * Plusでも同じように機能すると想定しています

-編集

AskTomから

クライアントだけが自分の文字セットも知っています-「データベース」では利用できません

そして

文字セットは、データベースに何が格納されているかを示します。

クライアントは、NLS_LANG設定を介して、目的の文字に変換された文字をデータベースに認識させます。

11.1以降を使用している場合、v $ session_connect_infoを使用すると、次のようなメリットがあります

この情報は、OCIによってログイン時にサーバーにプッシュされます。

しかし、それはまだ接続方法に依存していることを発見しました。たとえば、JDBC Thin DriverからOCIを使用していないため、情報はプッシュされません。


まあ、いいえ、それは私が探していたものとはまったく異なります:-)-しかし、あなたは(2)重要なポイントを上げます、そしてそれが真実であれば、それは許容できる答えになると思います。質問に2つのポイントを追加します。
マーティン

ば!(あなたのせいにしない)。しかし、Oracleが実際にそれを持っている:「唯一のクライアントは、彼らの知っている文字セットをだけでなく-それは利用できません『データベース』に」と「クライアントになります...を介してデータベースに知られているNLS_LANG」です本当に反対のことを言っているんですよね?:-)
Martin

はい、トム<>オラクルですが、あなたは正しいです。私は彼が自分の言葉につまづいていると思います-そのスレッド全体はスキミングする価値があります...
ジャックはtopanswers.xyzを試してみる

1
最初のリンクの受け入れられた回答-Ask Tom(2002年から)に関するこの質問は実際に同じことを尋ねるためデータベース。」
マーティン

0

あなたは以下を見ることができます

  • NLS_CALENDAR
  • NLS_CURRENCY
  • NLS_DATE_FORMAT
  • NLS_DATE_LANGUAGE
  • NLS_SORT
  • NLS_TERRITORY

例えば:

SQL> select sys_context('USERENV', 'NLS_TERRITORY') from dual;

SYS_CONTEXT('USERENV','NLS_TERRITORY')
--------------------------------------------------------------------------------
UNITED KINGDOM

1 row selected.

ここでsys_contextに言及すると便利だと思います。そうでない場合、これはどの文字セットの問題に対処できません。
マーティン

私のポイントは、これらはサーバーが知っている(または気にする)唯一のことです。
Gaius
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.