Symfoware(R) Server RDBユーザーズガイド 応用プログラム開発編 - FUJITSU - |
目次 索引 |
ここでは、応用プログラム中に日本語文字を使用する方法について説明します。
C言語で記述した応用プログラム中の日本語文字は、EUCコード(EUCコードまたはCOBOL_EUCコード)、UNICODE(UTF8コード、UCS2コードまたはUCS2Bコード)またはシフトJISコードで表現されます。一方、UNIX系システムにおけるSymfoware/RDBのデータベース中では日本語文字は、COBOL_EUCコード、UCS2コードまたはシフトJISコードで表現されます。Windows 2000およびWindows Server 2003におけるSymfoware/RDBのデータベース中では、UCS2コードまたはシフトJISコードで表現されます。コード系のうち、UNICODEは、Symfoware Server Enterprise Extended Edition、Symfoware Server Enterprise EditionおよびSymfoware Server Standard Editionで使用できます。
このように、応用プログラムとSymfoware/RDBのデータベースとでは、日本語文字コード系に違いがあります。
このため、Symfoware/RDBでは、応用プログラムが、EUCコード、COBOL_EUCコード、UCS2コード、UCS2Bコード、UTF8コードまたはシフトJISコードのどの日本語文字コードを選択しているかを動作環境ファイルに指定して、Symfoware/RDBのデータベースにアクセスできるようにしています。
応用プログラムで選択できる日本語文字コードとして、それぞれのコードの違いを表:応用プログラムで選択できる日本語文字コードに示します。
日本語文字コード |
意味と特長 |
動作環境ファイルでの実行パラメタの指定 |
---|---|---|
EUCコード |
EUCコードは、UNIX系システムの標準文字コード体系です。 |
NCHAR_CODE=EUC |
COBOL_EUC |
Symfoware/RDBのデータベース中の各国語文字列型のデータのコード系です。このコード系は、COBOLの内部表現形式である16ビットワイドキャラクタ表現に準拠しています。 |
NCHAR_CODE=COBOL_EUC |
UCS2コード |
UCS2コードは、OSに依存しない世界標準の文字コード系です。 |
NCHAR_CODE=UCS2 |
UCS2Bコード |
UCS2コードをバイトスワップした形式です。 |
NCHAR_CODE=UCS2B |
UTF8コード |
UTF8コードは、英数字および制御文字は1バイトで表現されます。各国語文字は、1文字が2〜6バイトとして制御されます。 |
NCHAR_CODE=UTF8 |
シフトJIS |
シフトJISコードは、英数字および制御文字は1バイトで表現されます。各国語文字は、1文字が2バイトとして制御されます。 |
NCHAR_CODE=SJIS |
日本語文字コード系を選択することにより、応用プログラム中の日本語文字に対する処理が異なります。たとえば、SQL文に指定する日本語文字列型のホスト変数には、選択した日本語文字コードのデータを設定または参照してデータベースアクセスを行います。
このため、応用プログラムの設計時には、実行時にどの日本語文字コード系を選択するかを決定しておく必要があります。
応用プログラムの実行時には、動作環境ファイルの実行パラメタ“NCHAR_CODE”に選択した日本語文字コード系を表:応用プログラムで選択できる日本語文字コードのように指定してください。指定方法の詳細については、“クライアント用の動作環境ファイルの作成”を参照してください。
ここでは、選択したそれぞれの日本語文字コードでプログラミングする場合の留意点について説明します。
各国語文字列型のデータをデータベースから取得、またはデータベースに格納する場合、日本語文字コードは2バイトとなります。このため、ホスト変数の長さは、以下のように算出してください。
ホスト変数の長さ = 日本語文字数 × 2バイト + 1 |
ただし、EUCコードの日本語文字を使用する場合は、日本語文字に3バイトの拡張漢字または利用者定義文字を含む可能性があります。このため、ホスト変数の長さは、格納に十分な大きさを考慮して以下のように算出してください。
ホスト変数の長さ = 日本語文字数 × 3バイト + 1 |
また、UTF8コードの日本語文字を使用する場合は、日本語文字コードは2〜6バイトとなります。
ホスト変数の長さ = 日本語文字数 × 6バイト + 1 |
動的SQLを使用して、各国語文字列型のデータをデータベースから取得する場合、SQL記述子域のオクテット長(バイト数)は、1文字を2バイトに換算した値となります。ただし、EUCコードの日本語文字を使用する場合は、取得するデータが2バイト表現の日本語文字か3バイト表現の日本語文字かにかかわらず、SQL記述子域のオクテット長(バイト数)は、1文字を3バイトに換算した値となります。また、UTF8コードの日本語文字を使用する場合は、1文字を6バイトに換算した値となります。
データベース中の日本語文字の長さは2バイトです。これに対してEUCコードおよびUTF8コードの日本語文字を使用する場合、ホスト変数の長さは、EUCコードは3バイトであり、UTF8コードは6バイトです。このため、ホスト変数に日本語文字を設定する、または設定される場合は、日本語文字列の切捨ておよび補正が行われます。
ホスト変数からデータベースにデータを格納する場合、ホスト変数に設定する日本語文字列の長さがホスト変数の長さよりも短い場合は、有効文字列以外の領域には、英数字の空白を設定してください。なお、日本語の空白は、有効な文字列とみなします。
データベースからホスト変数にデータを格納する場合、ホスト変数に設定されるEUCコードおよびUTF8コードの日本語文字の長さが、ホスト変数の長さよりも短い場合は、有効な文字列以外の領域には英数字の空白が設定されます。
目次 索引 |