web-dev-qa-db-ja.com

OracleからT-SQL OPENQUERYへの特殊文字変換の問題

リンクサーバーの文字エンコードの問題がどこから発生しているのかを理解するのに苦労しています。 DUMPで示されているように、ZPDT_PAT_ALPHA列の最後に度の記号が必要です。

SELECT *, CHAR(176)
FROM  OPENQUERY([R_Pronto], 'SELECT DUMP(ZPDT_PAT_ALPHA), ZPDT_PAT_ALPHA
            FROM LINKED.ZCUSPRODATTR0')

enter image description here

NLSパラメータは次のとおりです。 NLS_LANGはレジストリ「AMERICAN_AMERICA.WE8MSWIN1252」に設定されています

enter image description here

Microsoftを使用したリンクサーバー設定OLE DB Provider for ODBC Drivers enter image description here

特殊文字を正しく表示するために何を調整できるかについてのポインタを感謝します。残念ながら、変更を加えるためにOracle DBにアクセスできません。

このDBの上にあるアプリケーションは、文字を表示することができます-私はそれがOracleと直接インターフェースしていると思います。

enter image description here

ありがとう

編集:TRANSLATE USING NCHAR_CSの表示

Edit2: enter image description here

1
blakel

投稿したNLSパラメータは、Oracleクライアント接続用です。実際にOracleクライアントを使用しているわけではないので、それらが関連することはないと思います。 (デフォルト値のように見えます。)データベースの文字セットを確認するには、次のコマンドを実行します。

nLS_DATABASE_PARAMETERSから値を選択します。ここで、parameter = 'NLS_CHARACTERSET'

それがOracleの最近のバージョンである場合、「AL32UTF8」、つまりUTF-8と表示されることを期待します。

もしそうなら、あなたの問題はUTF-8を変換しようとしているのでしょうか? nvarcharはUCS-2として格納されます。適切なテスト環境がないため、コードを記述できませんが、次のようなものがあります。

declare @result nvarchar(255);
set @result = (select... )

シングルトン選択であると仮定します。 nvarcharとして明示的なキャストを試してみませんか? SQL Server 2019はいくつかのUTF-8サポートを備えていますが、まだ使用していません。

HTH

0
La Mochila