日本語文字を扱う文字列型データタイプで、複製先ターゲットのテーブル文字コードが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倍を確保しておけば安全です。
関連したトピックス
- 任意のデータ型でターゲットテーブル作成[DBMoto]
- [DBMoto]EBCDICのDB2(AS/400,z/OS)からのレプリケーションは特殊文字も外字もOK!
- DBMotoを使用してデータベース変更用の監査ログの作成方法【リアルタイムレプリケーションツールDBMoto】
- SQL Server on Linuxの可用性について ①
- SQL Server for Linuxがすぐそこに! – WindowsデータベースがHA機能を追加
- DBMOTOLIB Libraryの手動での作成方法(AS/400)【リアルタイムレプリケーションツールDBMoto】
- SQL Server on Linuxの可用性について ②
- HiT OLEDB/400とSQL Server:DTSによる通信
- DBMotoでのMicrosoft SQL Server 2017 on Linuxとの接続検証
- Oracle RAC One Node環境を構成してみました ステップ1 Oracle Linux環境の導入