DBMotoはIBM i(AS/400)やメインフレーム(z/OS)向けDB2からOracle等異種DBへのレプリケーションをサポートします。
DB2の文字コードがEBCDICの場合、レプリケーションの際にはDBMotoにてUnicodeへ変換し、レプリケーション先DBの文字コードに合わせて再度変換します。
文字コードが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選定文字コード」と呼ばれる下記の機種依存文字はそのままですと文字化けします。
しかし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を持っている状態です。
関連したトピックス
- HiT OLEDB/400 Ver7 とHiT ODBC/400 Ver11. リリースノート: 2016/1月
- [DBMoto]関数を使用してレプリケーション時のデータを変換する方法(VB/C#言語選択、関数適用、ユーザ関数作成、置換関数、一括設定手順)
- DBMotoからPostgreSQLへ接続するには・・・Npgsqlと外部接続の設定
- Ritmoでの全角文字使用
- HiT JDBC/DB2ドライバー:I/O exceptionエラー
- DBMotoでのBLOB・CLOBデータタイプのレプリケーションサポートについて
- HiT OLEDB Server/400での文字データの転送における文字問題
- DBMotoの各種機能別の動画デモについてのリンクサイト情報(異種DB接続、ミラーリング、シンクロナイゼーション)
- HiT ODBC 400 で日本語文字化けが発生する場合
- Logテーブルをマニュアルで削除する手順(DB2 UDB)【リアルタイムレプリケーションツールDBMoto】