[DBMoto]EBCDICのDB2(AS/400,z/OS)からのレプリケーションは特殊文字も外字もOK!


DBMotoはIBM i(AS/400)やメインフレーム(z/OS)向けDB2からOracle等異種DBへのレプリケーションをサポートします。
DB2の文字コードがEBCDICの場合、レプリケーションの際にはDBMotoにてUnicodeへ変換し、レプリケーション先DBの文字コードに合わせて再度変換します。
20150611-01

文字コードがEBCDICなのでどうしても文字化けを心配されがちですが、DBMotoは条件付きですべてのDB2の文字をレプリケーション可能です。

●EBCDICからUnicodeへの変換の仕組み

DBMotoはEBCDICからUnicodeへの変換の際にICUという文字変換ライブラリを使用しており、このライブラリに基づいて各文字ごとにマッピングされています。
下記のサイトにて実際にどのEBCDICがどのUnicodeに関連付けされているか確認可能です。

CCSID=5026の場合
https://github.com/unicode-org/icu-data/blob/master/charset/data/ucm/ibm-5026_X120-1999.ucm

CCSID=5035の場合
https://github.com/unicode-org/icu-data/blob/master/charset/data/ucm/ibm-5035_X120-1999.ucm

基本的には上記サイトに記載のEBCDICコードはすべてDBMotoでレプリケーション可能となります。

●特殊文字のレプリケーション

上記サイトに記載のないEBCDICコードはICUにおいてUnicodeへ関連付けされていないため、DBMotoでのレプリケーション時にはそのままですと文字化けしてしまいます。

具体的には「NEC選定文字コード」と呼ばれる下記の機種依存文字はそのままですと文字化けします。
20150611-02

しかしDBMotoには任意のEBCDICの文字を任意のUnicodeへ変換するための拡張機能を用意しておりますので、拡張用の変換テーブルを別途実際にはレプリケーションは可能となります。
※拡張用の変換テーブルは個別対応とさせていただいております。対応には検証も含めお時間をいただく場合があります。

●IBM拡張文字セット・NECのIBM選定文字セット

これらはICUにてUnicodeへマッピングされており、文字化けせずレプリケーション可能です。

●外字

これらもICUにてUnicodeへマッピングされております。

例:
(EBCDIC)\x6941 → U+E000(Unicode)
(EBCDIC)\x6942 → U+E001(Unicode)
(EBCDIC)\x6943 → U+E002(Unicode)
(EBCDIC)\x6944 → U+E003(Unicode)

従いまして文字コードとしては外字もレプリケーション可能ですが、
レプリケーション先のDBへアクセスするクライアントマシンにて外字登録を行う必要があります。
外字登録を行わないと表示上は文字化けしますが内部データとしては正しいUnicodeを持っている状態です。

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください