異種サービス (ODBC 経由) を使用して SQL Server 上のデータにアクセスする VMS 上の Oracle から、Oracle ゲートウェイ (dg4msql) 経由で SQL Server にアクセスする AIX 上の Oracle にデータを移行しています。Oracle VMS データベースでは、WE8ISO8859P1 文字セットが使用されていました。AIX データベースは WE8MSWIN1252 を使用します。SQL Server データベースは、sp_helpsort によると、"Latin1-General、大文字と小文字を区別しない、アクセントを区別しない、カナタイプを区別しない、幅を区別しない Unicode データの場合、非 Unicode データのコード ページ 1252 の SQL Server ソート順 52" を使用します。SQL Server データベースは、nchar/nvarchar またはすべての文字列列を使用します。
Application Express では、余分な文字が表示される場合があります。たとえば、123 は %001%002%003 と表示されます。sqlplus では問題ないように見えますが、initcap などの Oracle 関数を使用すると、(データベース リンクを使用して) SQL Server データベースにクエリを実行すると、文字列の各文字の間にスペースとして表示されるものが表示されます。これは、古い構成では発生しませんでした。
問題は、nchar に余分なバイトがあり、Oracle の文字セットがそれを変換できないことだと思います。ODBC ソリューションは nchars をサポートしていなかったようです。そのため、char にキャストし直しただけで、正常に表示されたに違いありません。私はSQLサーバーのデータを表示するだけでよいので、キャストなどのあらゆるソリューションを受け入れることができますが、うまくいくものは見つかりませんでした.
これに対処する方法についてのアイデアはありますか?Oracleで別の文字セットを使用する必要がありますか?もしそうなら、私はそのうちの1つだけを気にするので、それはすべてのスキーマに適用されますか.
更新:この質問を単純化できると思います。SQL Server テーブルは nchar を使用します。select dump(column) from table returns Typ=1 Len=6: 0,67,0,79,0,88 when the value is 'COX' when I select from the remote link to sql server, cast theliteral 'COX' nvarchar に変換するか、nvarchar として Oracle テーブルにコピーします。しかし、列自体を選択すると、リモート SQL サーバー リンクから選択する場合にのみ余分なスペースが表示されます。ダンプが同じものを返す理由がわかりませんが、ダンプを使用しないと異なる値が表示されます。どんな助けでも大歓迎です。