HiRDB データ連動機能 HiRDB Datareplicator Version 8
文字コードの対応の設計方法について説明します。
抽出側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の指定によって変換します。 |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.