• 検索結果がありません。

コード変換の考慮

ドキュメント内 アプリケーション開発ガイド (埋込みSQL編) (ページ 60-65)

第2章 アプリケーションの設計

2.5 文字コード系の考慮

2.5.2 コード変換の考慮

アプリケーションが使用する文字コード系と、データベースに格納されるデータの文字コード系が異なる場合、Symfoware/

RDBは自動的にコード変換を行います。

コード変換について以下の順に説明します。

コード変換の発生条件

コード変換と文字列長

コード変換指定に従わないもの

コード変換の発生条件

アプリケーションが扱うデータとデータベースに格納されるデータの文字コード系が異なる場合、Symfoware/RDBは双方 向でコード変換を行って文字コード系を調整します。

データベースに格納されるデータを抽出する際、アプリケーションの文字コード系に存在しない文字コードは、アンダー スコア“_”に変換されます。逆に、アプリケーションからデータベースに格納する際、データベースの文字コード系に存在 しない文字コードが含まれると、コード変換エラーとなります。

C言語の場合のコード変換

クライアント用の動作環境ファイルのパラメタCHAR_SETおよびNCHAR_CODEに指定された文字コード系と、デー タベースの文字コード系の間のコード変換の有無を以下に示します。

表2.20 アプリケーションのコード変換(文字列型)

CHAR_SETの 指定

データベースの文字コード系 EUC

コード のS90

コード EUC コード のU90

コード

シフト JISコー

UNICOD E

EUC_S90 ◎ × ○ ○

EUC_U90

× ◎ ○ ○

EUC

SJIS ○ ○ ◎ ○

UTF-8 ○ ○ ○ ◎

◎:コード変換を行わず処理

○:コード変換を行って処理

×:エラー(文字コード系を指定することはできません)

表2.21 アプリケーションのコード変換(各国語文字列型)

NCHAR_COD Eの指定

データベースの文字コード系 EUC

コード のS90

コード EUC コード のU90

コード

シフト JISコー

UNICOD E

EUC_S90

◎ × ○ ○

COBOL_EUC _S90

EUC_U90

× ◎ ○ ○

EUC

COBOL_EUC _U90 COBOL_EUC

SJIS ○ ○ ◎ ○

UTF-8

○ ○ ○ ◎

UCS2 UCS2B

◎:コード変換を行わず処理

○:コード変換を行って処理

×:エラー(文字コード系を指定することはできません)

コード変換と文字列長

データベースの文字コード系と、SQL埋込みホストプログラム内のホスト変数で使用する文字列の文字コード系が異なる 場合、データ操作でコード変換が発生します。それぞれの文字コード系によってはデータ長が増減することがあるため、

SQL埋込みホストプログラムを作成する場合に考慮が必要です。

ここでは、文字コード系と使用できる文字列長について説明します。

文字コード系における1文字のバイト数

SQL埋込みホストプログラム中のホスト変数内で使用できる文字列の文字コード系は、EUCコード、UTF-8形式または シフトJISコードです。また、各国語文字列の文字コード系は、EUCコード、COBOL_EUC形式、UCS-2形式、バイトス ワップしたUCS-2形式、UTF-8形式またはシフトJISコードです。

それぞれの文字コード系における、1文字のバイト数を以下に示します。

表2.22 1文字のバイト数

文字コード系 文字の種別 バイト数

EUCコード

英数字および制御文字 1バイト

拡張漢字および利用者定義文字 3バイト

その他の日本語文字 2バイト

UTF-8形式 英数字および制御文字 1バイト

各国語文字 2~6バイト

シフトJIS コード

英数字および制御文字 1バイト

半角カタカナ 1バイト

各国語文字 2バイト

また、それぞれのコード系における、各国語文字1文字のバイト数を以下に示します。

表2.23 1文字のバイト数(各国語文字の場合)

文字コード系 文字の種別 バイト数

EUCコード 拡張漢字および利用者定義文字 3バイト

その他の日本語文字 2バイト

COBOL_EUC形

式 日本語文字 2バイト

UCS-2形式 すべての文字 2バイトまたは4バイト

(注) バイトスワップした

UCS-2形式 すべての文字 2バイトまたは4バイト

(注)

UTF-8形式 日本語文字 2~6バイト

シフトJISコード 日本語文字 2バイト

注) UCS-2形式およびバイトスワップしたUCS-2形式では、補助文字(1~16面の4バイト文字)は2文字となります。

コード変換と文字列の拡大・縮小

データベースの文字コード系とSQL埋込みホストプログラム内で使用する文字列の文字コード系が異なる場合、デー タに対してコード変換が発生します。このとき、同じ文字でも文字コード系によってバイト数が異なる場合があるため、

文字列が拡大・縮小することがあります。

文字コード系による文字列の拡大・縮小の割合を以下に示します。

表2.24 文字列の拡大・縮小

データベースの文

字コード系

アプリケーションの文 字コード系

入力データ 出力データ 最小値 最大値 最小値 最大値

EUCコード

EUCコード 1倍 1倍 1倍 1倍

シフトJISコード 1倍 2倍 1/2倍 1倍

UTF-8形式 1/3倍 3/2倍 2/3倍 3倍

UNICODE

EUCコード 2/3倍 3倍 1/3倍 3/2倍

シフトJISコード 1倍 3倍 1/3倍 1倍

UTF-8形式 1倍 1倍 1倍 1倍

シフトJISコード

EUCコード 1/2倍 1倍 1倍 2倍

シフトJISコード 1倍 1倍 1倍 1倍

UTF-8形式 1/3倍 1倍 1倍 3倍

また、文字コード系による各国語文字列の拡大・縮小の割合を以下に示します。

表2.25 各国語文字列の拡大・縮小

データベースの文

字コード系

アプリケーションの文 字コード系

入力データ 出力データ 最小値 最大値 最小値 最大値

EUCコード

EUCコード 2/3倍 1倍 1倍 3/2倍

シフトJISコード 1倍 1倍 1倍 1倍

UTF-8形式 1/3倍 1倍 1倍 3倍

COBOL_EUC形式 1倍 1倍 1倍 1倍

バイトスワップした

UCS-2形式 1倍 1倍 1倍 1倍

UNICODE

EUCコード 2/3倍 2倍 1/2倍 3/2倍

シフトJISコード 1倍 2倍 1/2倍 1倍

UTF-8形式 1/3倍 2倍 1/2倍 3倍

COBOL_EUC形式 1倍 1倍 1倍 1倍

バイトスワップした

UCS-2形式 1倍 1倍 1倍 1倍

シフトJISコード

EUCコード 2/3倍 1倍 1倍 3/2倍

シフトJISコード 1倍 1倍 1倍 1倍

UTF-8形式 1/3倍 1倍 1倍 3倍

COBOL_EUC形式 1倍 1倍 1倍 1倍

バイトスワップした

UCS-2形式 1倍 1倍 1倍 1倍

文字コード系ごとの使用できる文字列長

コード変換によりデータ長が拡大・縮小した場合に、ホスト変数や列長の定量制限の32,000バイトを超えてしまう場合 があります。そこで、上記の拡大・縮小の割合を基に、コード変換に関係なく使用できる文字列のデータ長を以下に 示します。

表2.26 使用可能な文字列の最大長

データベースの文

字コード系

アプリケーションの文

字コード系 使用可能なデータ長

EUCコード

EUCコード 32,000 バイト

シフトJISコード 16,000 バイト

UTF-8形式 10,666 バイト

シフトJISコード

EUCコード 16,000 バイト

シフトJISコード 32,000 バイト

UTF-8形式 10,666 バイト

UNICODE

EUCコード 10,666 バイト

シフトJISコード 10,666 バイト

UTF-8形式 32,000 バイト

また、コード変換に関係なく使用できる各国語文字列のデータ長を以下に示します。

表2.27 使用可能な各国語文字列の最大長

データベースの文

字コード系

アプリケーションの文

字コード系 使用可能なデータ長

EUCコード

EUCコード 21,333 バイト

シフトJISコード 32,000 バイト

UTF-8形式 10,666 バイト

COBOL_EUC形式 32,000 バイト

バイトスワップした

UCS-2形式 32,000 バイト

シフトJISコード

EUCコード 21,333 バイト

シフトJISコード 32,000 バイト

UTF-8形式 10,666 バイト

COBOL_EUC形式 32,000 バイト

バイトスワップした

UCS-2形式 32,000 バイト

UNICODE

EUCコード 16,000 バイト

シフトJISコード 16,000 バイト

UTF-8形式 16,000 バイト

COBOL_EUC形式 32,000 バイト

UNICODE(バイトス ワップしたUCS-2形 式)

32,000 バイト

注意

取り出すデータの有効な長さが32,000バイトを超える場合は、標識変数に0または32,000が格納されます。この場合 は、コード変換が発生しない環境で動作させてください。

コード変換指定に従わないもの

コード変換は、クライアント用の動作環境ファイルの実行パラメタ(CHARACTER_TRANSLATE)の指定により、クライア ントまたはサーバのどちらかで行います。ただし、この変換指定に従わず、データベースの文字コード系に従って処理さ れるものは、以下のとおりです。

ORDER BY句による整列順序

SQL述語の大小比較結果

集合関数の最大または最小値

ドキュメント内 アプリケーション開発ガイド (埋込みSQL編) (ページ 60-65)