2016-04-18 13 views
0

私はSystem.Data.OracleClient経由でOracleデータベースに接続する.netアプリケーション(Winformsアプリケーション)を持っています。 データベースを照会すると、「?」が表示されます。トルコ語の文字の代わりに。同じデータベース(と同じデータベースユーザー)を使用するデルファイアプリケーションがあります。 "İ、Ş、Ğ、Ü"などのトルコ語の文字を表示できます。Oracleのトルコ文字を表示できませんでした

私はtoadとpl/sqlで同じ問題があります。開発者。私は、デルファイアプリケーションは、接続文字列で余分なパラメータを設定するトルコの文字を表示することができると思う(私は "エンコーディング= true"を設定しますが、それは動作しません)

私はこのクエリを実行してnls_langの値を表示します。

select DECODE(parameter, 'NLS_CHARACTERSET', 'CHARACTER SET', 
'NLS_LANGUAGE', 'LANGUAGE', 
'NLS_TERRITORY', 'TERRITORY') name, 
value from v$nls_parameters 
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY') 

これは私にこれらの値を示しています。

1 LANGUAGE AMERICAN 
2 TERRITORY AMERICA 
3 CHARACTER SET AL32UTF8 

最後に、「?」を更新すると、 pl/sql開発者のトルコ文字( "Ş"など)に変換すると、私の.netアプリケーションが正しく表示されます。しかし、私はすべてを交換することはできません "?トルコ語の文字に値。

答えて

0

私は既に問題を解決したと思います。特にPL/SQL Developerを起動するときに欠落しているNLS_LANG環境変数の設定についてヒントが得られたかどうかは疑問です。 NLS_LANGは、どのキャラクタ・セットが予期されているかをOCIインタフェースに通知するだけです。変換は、DBサーバーとクライアントの間でデータが転送されたときに行われます。

これとは独立しています。あなたがよくわからない場合は、stingcolテーブルから選択すると、ステートメントは実際の値と同様に文字セットを返します。

PL/SQL DeveloperまたはSQL/Detectiveは、DOAコンポーネント(Allround Automation)を使用します。しかし、Delphiアプリケーションは、クエリ結果が到着した後に文字変換を指定して処理するさまざまな方法を提供する、さまざまなDBコンポーネントを利用できます。

具体的には、.netアプリケーションも2つのツールも文字を正しく示していないため( '?')、問合せしたパラメータは、DB側のNLSパラメータです。

ですから、コントロールが認識して

  • NLS_LANG設定されていないUNICODEされていない、少なくとも2つのオプション

    1. 持っている - あなたのツールは古い死んでいない場合、クライアントは

    US7ASCIIまたはWE8ISO8859P1

  • を想定しているがそれらのすべてがUNICODEを認識しています。今日、FireDACエクスプローラは、一般的に、接続が使用する関連設定を示すレポートを提供します。例

    ... FireDAC Connection Info

    NLS_LANGは、アプリケーションが正常に読み取りおよび書き込み、それ自身のデータをしかし、誰もができることができます「間違った」存在しないか、またはされてください。

    関連する問題