TECHNOLOGY

FAQ (よくある質問)

対象バージョン : 8.0.x以前
対象OS : Windows 95/98/ME/NT/2000/XP

QUESTION ( SQ0406051 )

Mobile Linkを使ってローマ数字(Ⅰ、Ⅱ、Ⅲ~Ⅹ)を含んだデータをリモート・データベースにダウンロードし、そのデータをWHERE句の条件に指定すると、データ選択等が正常に行われません。
しかしリモート・データベース側でINSERT、UPDATEしたローマ数字に関しては問題ありません。

ANSWER

この現象は、cp932でNEC特殊文字として定義されている、ローマ数字(Ⅰ~Ⅹ)、”№”、”℡”、”㈱”がIBM拡張文字として二重に定義(重複符号化)されている事が原因です。

例えば、ローマ数字Ⅰ(0x8754)をダウンロードした場合
1.統合データベースのエンジンは文字セットのコンバートを行わないために、
  コード0x8754をODBCドライバーに渡します。

2.ODBCドライバは、unicode u+2160にコンバートしてML Serverに送ります。

3.ML Serverは、それをUNILIB(Sybase 文字変換ライブラリ)によって0xfa4a
  にコンバートしてから、dbmlsyncに送ります。
  そして、dbmlsyncはリモート・データベースにコード(0xfa4a)を渡します。

結果として、リモート・データベースのテーブルでは、コードが0xfa4aにコンバートされたローマ数字Ⅰに変わっており、Microsoft IMEで入力するローマ数字Ⅰのコードは0x8754ですので、WHERE句の条件とした場合にアンマッチとなりこのような現象が発生しました。

この問題は、cp932ms2.uctを現状のcp932ms.uctと置き換える(ML Server側)ことで防ぐことが可能になります。

-例-
C:Program FilesSybaseSQL Anywhere 8charsetsunicodecp932ms.uctを別名(例えば、cp932ms.uct)に変更し、同フォルダにcp932ms2.uctの名称を変更(cp932ms.uct)コピーします。

下記のURLをご参照下さい。
SHIFT‐JISとUnicode間の変換問題
http://support.microsoft.com/default.aspx?scid=kb;ja;17559