文字コードの対応の設計方法について説明します。
抽出側DBと反映側DBの文字コードの種類を次に示します。
抽出側DBと反映側DBとの文字コードが異なっている場合,Datareplicatorは文字コードを定義に従って変換します。抽出側DBと反映側DBで同じ文字コードを使っている場合は,文字コードを変換する必要はありません。
反映側Datareplicatorでは,抽出側DBの文字コードを反映側DBの文字コードに対応させて変換します。反映側DBの文字コードは,反映システム定義のdblocaleオペランドで指定します。
抽出側DBがメインフレーム側DBの場合,抽出側DBの文字コードのEBCDIK/KEISの種類は,反映環境定義のebcdic_typeオペランドで指定します。
抽出側DBと反映側DBの文字コードの対応を次の表に示します。
表4-15 抽出側DBと反映側DBの文字コードの対応
抽出側DBの文字コード | 反映側DBの文字コード | ||||
---|---|---|---|---|---|
EBCDIK/KEIS※1 | EBCDIK | JIS8/シフトJIS | EUC※2 | UTF-8 | |
EBCDIK/KEIS※1 | - | - | ○ | ○ | ○ |
EBCDIK | - | - | ○ | - | - |
JIS8/シフトJIS | ○ | ○ | - | ○ | ○ |
EUC※2 | ○ | - | ○ | - | ○ |
UTF-8 | ○ | - | ○ | ○ | - |
Datareplicatorでの文字コードの変換規則について説明します。
対応するシフトJISの文字コードに変換されます。
ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。
未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定値に従って,空白文字に変換されます。
シフトコード中の空白文字は,変換されます。空白文字の変換規則(EBCDIK/KEISからJIS8/シフトJIS)を次の表に示します。
表4-16 空白文字の変換規則(EBCDIK/KEISからJIS8/シフトJIS)
EBCDIK/KEISの文字コード | JIS8/シフトJISの文字コード |
---|---|
全角の空白文字 (A1A1)16 | 全角の空白文字 (8140)16 |
二つの連続した半角の空白文字 (40)16 (40)16 | 反映環境定義のshiftspace_cnvオペランドの指定値に従って,全角の空白文字又は二つの連続した半角の空白文字に変換します。 |
半角の空白文字 (40)16 | 半角の空白文字 (20)16 |
9024文字中の外字領域の後ろ8836文字を,EUC文字コードの外字領域に固定的に割り当てて変換されます。
それ以外のコードは,ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定値に従って,空白文字に変換されます。
ただし,コードセット3はSQL文の発行時にエラーになることがあります。
空白文字は,変換されます。空白文字の変換規則(EBCDIK/KEISからEUC)を次の表に示します。
表4-17 空白文字の変換規則(EBCDIK/KEISからEUC)
EBCDIK/KEISの文字コード | EUCの文字コード |
---|---|
全角の空白文字 (A1A1)16 | 全角の空白文字 (A1A1)16 |
二つの連続した半角の空白文字 (40)16 (40)16 | 反映環境定義のshiftspace_cnvオペランドの指定値に従って,全角の空白文字又は二つの連続した半角の空白文字に変換します。 |
半角の空白文字 (40)16 | 半角の空白文字 (20)16 |
半角の仮名文字は1バイトから2バイトに変換されるため,抽出対象表で半角の仮名文字を使っている場合,変換後のデータ長が長くなってオーバフローが発生することがあります。オーバフローが発生した場合の対処(EBCDIK/KEISからEUC)を次の表に示します。
表4-18 オーバフローが発生した場合の対処(EBCDIK/KEISからEUC)
発生場所 | Datareplicatorの動作 | ユーザの対処 |
---|---|---|
定数,更新データ | SQLエラー(全バイト数の変換後に,データが定義長を超えた場合) | 定義長を変更して,反映処理を再実行してください。 |
ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。
未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。
シフトコード中の空白文字は,変換されます。空白文字の変換規則(EBCDIK/KEISからUTF-8)を次の表に示します。
表4-19 空白文字の変換規則(EBCDIK/KEISからUTF-8)
EBCDIK/KEISの文字コード | UTF-8の文字コード |
---|---|
全角の空白文字 (A1A1)16 | 全角の空白文字 (E38080)16 |
二つの連続した半角の空白文字 (40)16(40)16 | 反映環境定義のshiftspace_cnvオペランドの指定値に従って,全角の空白文字又は二つの連続した半角の空白文字に変換します。 |
半角の空白文字 (40)16 | 半角の空白文字 (20)16 |
半角の仮名文字は1バイトから3バイトに変換され,標準漢字は2バイトから3バイトに変換されるため,抽出対象表で半角仮名文字や標準漢字を使用している場合,変換後のデータ長が長くなってオーバフローが発生することがあります。
オーバフローが発生した場合の対処(EBCDIK/KEISからUTF-8)を次の表に示します。
表4-20 オーバフローが発生した場合の対処(EBCDIK/KEISからUTF-8)
発生場所 | Datareplicatorの動作 | ユーザの対処 |
---|---|---|
定数,更新データ | SQLエラー(全バイト数の変換後に,データが定義長を超えた場合) | 定義長を変更して,反映処理を再実行してください。 |
反映側DBがHiRDBでUTF-8の場合,表にNCHAR・NVARCHAR型の列を作成できません。そのため,MCHARなど別のデータ型に格納する場合は,列データ編集UOCを使用して格納してください。
JIS8コード(1バイトコード)に変換します。文字集合指定でEBCDIKを指定した列には1バイトコードしか指定できないため,次の現象が起こる可能性があります。
対応するEBCDIKの文字コードに変換されます。
2バイトコードの1バイト目と2バイト目をそれぞれ1バイトコードとみなし,それぞれをEBCDIKの1バイトコード2文字に変換します。そのため,次の現象が起こる可能性があります。
対応するEBCDIK/KEISの文字コードに変換されます。
対応するEBCDIK/KEISの文字コードに変換されます。
ただし,最後の文字が2バイトコードの先頭バイトの場合は,空白文字( (40)16)に変換されます。
ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。
未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,空白文字( (4040)16)に変換されます。
全角空白文字( (8140)16)は,対応する全角空白文字( (A1A1)16)に変換されます。半角空白文字( (20)16)は,対応する半角空白文字( (40)16)に変換されます。
対応するUTF-8の文字コードに変換されます。
ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。
未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。
シフトコード中の空白文字は,変換されます。空白文字の変換規則(JIS8/シフトJISからUTF-8)を次の表に示します。
表4-21 空白文字の変換規則(JIS8/シフトJISからUTF-8)
JIS8/SJISの文字コード | UTF-8の文字コード |
---|---|
全角の空白文字 (8140)16 | 全角の空白文字 (E38080)16 |
半角の空白文字 (20)16 | 半角の空白文字 (20)16 |
半角の仮名文字は1バイトから3バイトに変換され,標準漢字は2バイトから3バイトに変換されるため,抽出対象表で半角仮名文字や標準漢字を使用している場合,変換後のデータ長が長くなってオーバフローが発生することがあります。オーバフローが発生した場合の対処(JIS8/シフトJISからUTF-8)を次の表に示します。
表4-22 オーバフローが発生した場合の対処(JIS8/シフトJISからUTF-8)
発生場所 | Datareplicatorの動作 | ユーザの対処 |
---|---|---|
定数,更新データ | SQLエラー(全バイト数の変換後に,データが定義長を超えた場合) | 定義長を変更して,反映処理を再実行してください。 |
表4-23 SJIS漢字コードとUnicodeでの文字のマッピング
マッピング方式 | 内容 | ||
---|---|---|---|
方式 | 変換対象 | 漢字範囲 | |
JIS方式 | SJIS~JIS X0221 | JIS第1水準 | JIS X0221で規定されたマッピングに従います。 |
JIS第2水準 | |||
MS方式 | Windows符号化文字集合~MS-Unicode | JIS第1水準 | Microsoft社が規定したマッピングに従います。 |
JIS第2水準 | |||
ベンダ拡張文字 |
対応するシフトJISのコードに変換されます。
対応するシフトJISのコードに変換されます。最後の文字が2バイトコードの先頭バイトである場合は,空白文字((20)16)に変換されます。
ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定値に従って,空白文字に変換されます。
全角の空白文字((A1A1)16)は対応するコード((8140)16)に変換されます。2個連続する半角の空白文字((20)16)は全角空白文字((8140)16)に変換されます。1個の半角の空白文字((20)16)は対応するコード((20)16)に変換されます。
仮名文字を除く1バイトコードは,対応するUTF-8の文字コードに変換されます。
ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。
未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。
シフトコード中の空白文字は,変換されます。空白文字の変換規則(EUCからUTF-8)を次の表に示します。
表4-24 空白文字の変換規則(EUCからUTF-8)
EUCの文字コード | UTF-8の文字コード |
---|---|
全角の空白文字 (A1A1)16 | 全角の空白文字 (E38080)16 |
半角の空白文字 (20)16 | 半角の空白文字 (20)16 |
半角の仮名文字は2バイトから3バイトに変換され,標準漢字は2バイトから3バイトに変換されるため,抽出対象表で半角仮名文字や標準漢字を使用している場合,変換後のデータ長が長くなってオーバフローが発生することがあります。オーバフローが発生した場合の対処(EUCからUTF-8)を次の表に示します。
表4-25 オーバフローが発生した場合の対処(EUCからUTF-8)
発生場所 | Datareplicatorの動作 | ユーザの対処 |
---|---|---|
定数,更新データ | SQLエラー(全バイト数の変換後に,データが定義長を超えた場合) | 定義長を変更して,反映処理を再実行してください。 |
対応する各文字コードに変換されます。
対応するUTF-8の文字コードに変換されます。
ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。
未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。
任意の抽出列に対して文字コードの変換抑止を指定すると,反映側Datareplicatorでその列の文字コード変換を抑止できます。文字コード変換の抑止の指定については,「5.10 反映定義」の更新情報フィールド定義の説明を参照してください。
JIS8/シフトJISコードの変換規則を次の表に示します。
表4-26 JIS8/シフトJISコードの変換規則
1byte | 2byte | 3byte | コード変換規則 |
---|---|---|---|
0x00-0x80 | - | - | JIS8と認識し,対応するコードに変換します。 |
0x81-0x9F | 0x40-0xFC (0x7Fを除く) | - | SJIS(漢字)と認識し,対応するコードに変換します。 |
上記以外 | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 | |
0xA0-0xDF | - | - | JIS8と認識し,対応するコードに変換します。 |
0xE0-0xEF | 0x40-0xFC (0x7Fを除く) | - | SJIS(漢字)と認識し,対応するコードに変換します。 |
上記以外 | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 | |
0xF0-0xFC | 0x40-0xFC (0x7Fを除く) | - | SJIS(外字)と認識し,対応するコードに変換します。 |
上記以外 | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 | |
0xFD-0xFF | - | - | JIS8と認識し,対応するコードに変換します。 |
EUCコードの変換規則を次の表に示します。
表4-27 EUCコードの変換規則
1byte | 2byte | 3byte | コード変換規則 |
---|---|---|---|
0x00-0x8D | - | - | コードセット0と認識し,対応するコードに変換します。 |
0x8E | 0xA0-0xFF | - | コードセット2(仮名文字)と認識し,対応するコードに変換します。 |
上記以外 | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 | |
0x8F | 0xA1-0xFE | 0xA1-0xFE | コードセット3(外字)と認識し,対応するコードに変換します。 |
上記以外 | undefcode_cnvの指定によって変換します。 | ||
- | 未完全コードと認識し,変換しないでスキップします。 | ||
上記以外 | 0xA1-0xFE | undefcode_cnvの指定によって変換します。 | |
上記以外 | |||
- | 未完全コードと認識し,変換しないでスキップします。 | ||
- | - | ||
0x90-0x9F | - | - | コードセット0と認識し,対応するコードに変換します。 |
0xA0 | - | - | 0x20に変換します。 |
0xA1-0xFE | 0xA1-0xFE | - | コードセット1(漢字)と認識し,対応するコードに変換します。 |
上記以外 | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 |
EBCDIK/KEISコードの変換規則を次の表に示します。
表4-28 EBCDIK/KEISコードの変換規則
1byte | 2byte | 3byte | コード変換規則 | |
---|---|---|---|---|
半角シフト中 | 0x00-0x09 | - | - | 対応するコードに変換します。 |
0x0A | 0x41 | - | 半角シフト切り替えで,変換しません。 | |
0x42 | - | 全角シフト切り替えで,変換しません。 | ||
上記以外 | - | 第1バイト,第2バイトを1バイトコードとして変換します。 | ||
- | - | 未完全コードと認識し,変換しないでスキップします。 | ||
0x0B-0xFF | - | - | 対応するコードに変換します。 | |
全角シフト中 | 0x00-0x40 | - | - | 第1バイト,第2バイトを1バイトコードとして変換します。 |
0x41-0xA0 | 0xA1-0xFE | - | 対応するコードに変換します。 | |
上記以外 | - | undefcode_cnvの指定によって変換します。 | ||
- | - | 未完全コードと認識し,変換しないでスキップします。 | ||
0xA1-0xFE | 0xA1-0xFE | - | 対応するコードに変換します。 | |
上記以外 | - | undefcode_cnvの指定によって変換します。 | ||
- | - | 未完全コードと認識し,変換しないでスキップします。 | ||
0xFF | 0x01-0xFF | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 |
UTF-8コードの変換規則を次の表に示します。
表4-29 UTF-8コードの変換規則
1byte | 2byte | 3byte | コード変換規則 |
---|---|---|---|
0x00~0x7F | - | - | 1バイトコードと認識し,対応するコードに変換します。 |
0x80~0xBF | 0x00~0xFF | - | 0x20に変換します。 |
- | - | ||
0xC2~0xDE | 0x80~0xFF | - | 2バイトコードと認識し,対応するコードに変換します。 |
上記以外 | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 | |
0xDF | 0x80~0xBF | - | 2バイトコードと認識し,対応するコードに変換します。 |
上記以外 | - | undefcode_cnvの指定によって変換します。 | |
- | - | 未完全コードと認識し,変換しないでスキップします。 | |
0xE0 | 0xA0~0xFF | 0x80~0xFF | 3バイトコードと認識し,対応するコードに変換します。 |
上記以外 | undefcode_cnvの指定によって変換します。 | ||
- | 未完全コードと認識し,変換しないでスキップします。 | ||
上記以外 | 0x80~0xFF | undefcode_cnvの指定によって変換します。 | |
上記以外 | |||
- | 未完全コードと認識し,変換しないでスキップします。 | ||
- | - | ||
0xE1~0xEE | 0x80~0xFF | 0x80~0xFF | 3バイトコードと認識し,対応するコードに変換します。 |
上記以外 | undefcode_cnvの指定によって変換します。 | ||
- | 未完全コードと認識し,変換しないでスキップします。 | ||
上記以外 | 0x80~0xFF | undefcode_cnvの指定によって変換します。 | |
- | 未完全コードと認識し,変換しないでスキップします。 | ||
- | - | ||
0xEF | 0x80~0xBF | 0x80~0xBF | 3バイトコードと認識し,対応するコードに変換します。 |
上記以外 | undefcode_cnvの指定によって変換します。 | ||
- | 未完全コードと認識し,変換しないでスキップします。 | ||
上記以外 | 0x80~0xBF | undefcode_cnvの指定によって変換します。 | |
上記以外 | |||
- | 未完全コードと認識し,変換しないでスキップします。 | ||
- | - | ||
上記以外 | - | - | undefcode_cnvの指定によって変換します。 |