ページの先頭行へ戻る
Symfoware Server V12.1.x アプリケーション開発ガイド(埋込みSQL編)
FUJITSU Software

2.3.2 コード変換の考慮

アプリケーションが使用する文字コード系と、データベースに格納されるデータの文字コード系が異なる場合、Symfoware/RDBは自動的にコード変換を行います。

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

コード変換の発生条件

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

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

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

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

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

CHAR_SETの指定

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

EUCコードのS90コード

EUCコードのU90コード

シフトJISコード

UNICODE

EUC_S90

×

○(注1)

○(注2)

EUC_U90

×

○(注1)

○(注2)

EUC

SJIS

○(注1)

○(注1)

○(注2)

UTF-8

○(注2)

○(注2)

○(注2)

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

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

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

注1) JIS X 0213:2004(通称JIS2004)の範囲でコード変換を行う

注2) JIS X 0208-1990の範囲でコード変換を行う


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

NCHAR_CODEの指定

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

EUCコードのS90コード

EUCコードのU90コード

シフトJISコード

UNICODE

EUC_S90

×

○(注1)

○(注2)

COBOL_EUC_S90

EUC_U90

×

○(注1)

○(注2)

EUC

COBOL_EUC_U90

COBOL_EUC

SJIS

○(注1)

○(注1)

○(注2)

UTF-8

○(注2)

○(注2)

○(注2)

○(注3)

UCS2

UCS2B

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

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

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

注1) JIS X 0213:2004(通称JIS2004)の範囲でコード変換を行う

注2) JIS X 0208-1990の範囲でコード変換を行う

注3) UNICODE 4.1の範囲でコード変換を行う


COBOLの場合のコード変換

ホスト変数の文字コード系と、データベースの文字コード系の間のコード変換の有無を以下に示します。

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

ホスト変数の文字コード系

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

EUCコードのS90コード

EUCコードのU90コード

シフトJISコード

UNICODE

EUCコード

×

○(注1)

○(注2)

シフトJISコード

○(注1)

○(注1)

○(注2)

UTF-8形式

○(注2)

○(注2)

○(注2)

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

ホスト変数の文字コード系

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

EUCコード

シフトJISコード

UNICODE

シフトJISコード

○(注1)

○(注2)

UTF-8形式

○(注2)

○(注2)

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

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

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

注1) JIS X 0213:2004(通称JIS2004)の範囲でコード変換を行う

注2) JIS X 0208-1990の範囲でコード変換を行う


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

ホスト変数の文字コード系

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

EUCコードのS90コード

EUCコードのU90コード

シフトJISコード

UNICODE

EUCコード

×

○(注1)

○(注2)

シフトJISコード

○(注1)

○(注1)

○(注2)

UCS-2形式

○(注2)

○(注2)

○(注2)

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

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

ホスト変数の文字コード系

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

EUCコード

シフトJISコード

UNICODE

シフトJISコード

○(注1)

○(注2)

UCS-2形式

○(注2)

○(注2)

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

UTF-32形式

○(注3)

バイトスワップしたUTF-32形式

○(注3)

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

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

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

注1) JIS X 0213:2004(通称JIS2004)の範囲でコード変換を行う

注2) JIS X 0208-1990の範囲でコード変換を行う

注3) UNICODE 4.1の範囲でコード変換を行う

コード変換と文字列長

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

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

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

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

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

表2.13 1文字のバイト数

文字コード系

文字の種別

バイト数

EUCコード

英数字および制御文字

1バイト

拡張漢字および利用者定義文字

3バイト

その他の日本語文字

2バイト

UTF-8形式

英数字および制御文字

1バイト

各国語文字

2~6バイト

シフトJISコード

英数字および制御文字

1バイト

半角カタカナ

1バイト

各国語文字

2バイト

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

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

文字コード系

文字の種別

バイト数

EUCコード

拡張漢字および利用者定義文字

3バイト

その他の日本語文字

2バイト

COBOL_EUC形式

日本語文字

2バイト

UCS-2形式

すべての文字

2バイトまたは4バイト (注)

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

すべての文字

2バイトまたは4バイト (注)

WindowsUTF-32形式またはバイトスワップしたUTF-32形式

すべての文字

4バイト

UTF-8形式

日本語文字

2~6バイト

シフトJISコード

日本語文字

2バイト

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

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

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

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

表2.15 文字列の拡大・縮小

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

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

入力データ

出力データ

最小値

最大値

最小値

最大値

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.16 各国語文字列の拡大・縮小

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

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

入力データ

出力データ

最小値

最大値

最小値

最大値

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倍

WindowsUTF-32形式またはバイトスワップしたUTF-32形式

1/2倍

1倍

1倍

2倍

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倍

WindowsUTF-32形式またはバイトスワップしたUTF-32形式

1/2倍

1倍

1倍

2倍

シフト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倍

WindowsUTF-32形式またはバイトスワップしたUTF-32形式

1/2倍

1倍

1倍

2倍

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

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

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

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

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

使用可能なデータ長

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.18 使用可能な各国語文字列の最大長

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

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

使用可能なデータ長

EUCコード

EUCコード

21,333 バイト

シフトJISコード

32,000 バイト

UTF-8形式

10,666 バイト

COBOL_EUC形式

32,000 バイト

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

32,000 バイト

WindowsUTF-32形式またはバイトスワップしたUTF-32形式

16,000 バイト

シフトJISコード

EUCコード

21,333 バイト

シフトJISコード

32,000 バイト

UTF-8形式

10,666 バイト

COBOL_EUC形式

32,000 バイト

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

32,000 バイト

WindowsUTF-32形式またはバイトスワップしたUTF-32形式

16,000 バイト

UNICODE

EUCコード

16,000 バイト

シフトJISコード

16,000 バイト

UTF-8形式

16,000 バイト

COBOL_EUC形式

32,000 バイト

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

32,000 バイト

WindowsUTF-32形式またはバイトスワップしたUTF-32形式

16,000 バイト

注意

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

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

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