SQL*Plus(バージョン11.1.0.6)から、
SQLServer2005のデータを取得しようとしたら文字化けが発生した。
numeric型では文字化けは発生しないが、
nchar型で文字化けが発生していることから、
文字コードかなと推測。
文字コードを調べてみたところ、
OracleのUnicodeは設定しだいで、
SQLServerのUnicodeはUCS-2
(Microsoft SQL Server 2000 および Microsoft SQL Server 2005 において Unicode で格納される情報には、UCS-2 エンコードが使用されます。)、
らしい。
UCS-2だから文字化けしてるのかと思っていろいろやってみたが解消されず、
外国系Google先生にお訪ねしてみると、以下のご回答をいただけました。
謎の英語サイト
どうやらbigとlittleのendianの取り扱いによる、Oracleのバグらしい。
パッチをあててバージョン11.1.0.7のSQL*Plusで実施したら解消されました。
とりあえず解決してよかったが、まさかバグとは・・・。
そして文字コードの難解さを改めて感じた二日間でした。
SQLServer2005のデータを取得しようとしたら文字化けが発生した。
numeric型では文字化けは発生しないが、
nchar型で文字化けが発生していることから、
文字コードかなと推測。
文字コードを調べてみたところ、
OracleのUnicodeは設定しだいで、
SQLServerのUnicodeはUCS-2
(Microsoft SQL Server 2000 および Microsoft SQL Server 2005 において Unicode で格納される情報には、UCS-2 エンコードが使用されます。)、
らしい。
UCS-2だから文字化けしてるのかと思っていろいろやってみたが解消されず、
外国系Google先生にお訪ねしてみると、以下のご回答をいただけました。
謎の英語サイト
When trying to access SQL_WCHAR data, data is either incorrectly returned or an Oracle error is returned. This is because Easysoft’s Windows ODBC drivers use little endian (UCS-2LE) format for SQL_WCHAR data, but DG4ODBC currently expects big endian (UCS-2BE) SQL_WCHAR data. This issue is currently being investigated by Oracle and should be resolved in Oracle version 11.1.0.7. (See Oracle Bug 6993468 - FAILURE TO QUERY USING DG4ODBC - VARCHAR DATA OUTPUT IS GARBLED on the OracleMetaLink site.)
どうやらbigとlittleのendianの取り扱いによる、Oracleのバグらしい。
パッチをあててバージョン11.1.0.7のSQL*Plusで実施したら解消されました。
とりあえず解決してよかったが、まさかバグとは・・・。
そして文字コードの難解さを改めて感じた二日間でした。
コメント
コメントを投稿