レプリケーション時には双方のDBのデータタイプ文字サイズに注意


日本語文字を扱う文字列型データタイプで、複製先ターゲットのテーブル文字コードがUTF-8の場合には注意が必要です。

例えば下記の例で考えてみます。

・複製元ソース:AS/400
フィールド:VARCHAR(10)
文字コード:EBCDIC

・複製先ターゲット:DB2 UDB(Windows/Linux/AIX)
フィールド:VARCHAR(10)
文字コード:UTF-8
※DB2バージョン9.5以降はOSに関係なく既定の文字コードが「UTF-8」に変更されました。

次に実際のデータでバイト数を考えてみます。

・データが「1234567890」の場合
AS/400・・・各文字1バイトなので10バイトです。
DB2 UDB・・・各文字1バイトなので10バイトです。
⇒VARCHAR(10)の範囲内なので問題なしですね。

・データが「あああaa」の場合
AS/400・・・日本語は2バイトなので合計8バイトです。かつAS/400の場合は日本語文字列の前後にはシフトイン(1バイト)、シフトアウト(1バイト)が挿入されるため、合計10バイトです。
DB2 UDB・・・日本語はUTF-8なので3バイトとなり、日本語のみで9バイト+アルファベット2文字で11バイトです。
⇒VARCHAR(10)の範囲に入りません。つまりDBMotoでレプリケーションしても桁あふれエラーとなります。

このため、ターゲットDBのテーブルがUTF-8で日本語を扱うCHARやVARCHAR系のデータイプのサイズには注意する必要があります。単純計算で、ソースDBのサイズの1.5倍を確保しておけば安全です。

関連したトピックス

コメントを残す

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

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