Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU -
目次 索引 前ページ次ページ

第3章 アプリケーションの作成> 3.1 SQL埋込みCプログラムの作成方法

3.1.5 日本語文字の使用方法

ここでは、アプリケーション中に日本語文字を使用する方法について説明します。

C言語で記述したアプリケーション中の日本語文字は、日本語EUCコードのS90コー(EUC_S90またはCOBOL_EUC_S90)、日本語EUCコードのU90コード(EUC_U90またはCOBOL_EUC_U90)、UNICODE(UTF8、UCS2またはUCS2B)またはシフトJISコーで表現されます。一方、UNIX系システムにおけるSymfoware/RDBのデータベース中では日本語文字は、COBOL_EUC_S90、COBOL_EUC_U90、UCS2またはシフトJISコードで表現されます。Windows(R) 2000およびWindows Server(TM) 2003におけるSymfoware/RDBのデータベース中では、UCS2またはシフトJISコードで表現されます。

このように、アプリケーションとSymfoware/RDBのデータベースとでは、使用する文字コード系に違いがあります。

このため、Symfoware/RDBでは、アプリケーションが、EUC_S90、EUC_U90、COBOL_EUC_S90、COBOL_EUC_U90、UTF8、UCS2、UCS2BまたはシフトJISコードのどの日本語文字コードを選択しているかを動作環境ファイルに指定して、Symfoware/RDBのデータベースにアクセスできるようにしています。

アプリケーションで選択できる日本語文字コードと、それぞれのコードの違いを以下に示します。

[表: アプリケーションで選択できる日本語文字コード]

日本語文字コード

意味と特長

動作環境ファイルでの実行パラメタの指定

日本語EUCコードのS90コード

日本語EUCコードのS90コードは、UNIX系システムの日本語環境でよく使われる文字コード系です。通常、UNIX系システムにおいて、日本語EUCコードを使用する場合は、S90コードを使用します。

拡張漢字および利用者定義文字を含むすべての日本語文字は、2バイトで表現されます。

NCHAR_CODE=EUC_S90

日本語EUCコードのU90コード

日本語EUCコードのU90コードは、富士通で採用している拡張漢字/非漢字(JEF拡張文字)に対応するEUCコードの文字コード系です。JEF拡張文字に対応している文字コード系であることからJEFコードと高い親和性を持ちます。しかし、その反面、1978年、1983年のJIS規格改定の影響を受け、Microsoft系のシフトJISコードなどの文字コード系とのコード変換で変換エラーが発生します。したがって、他の文字コード系とのコード変換を行う場合は、コード変換エラーによるデータ損失の危険性がないかの確認が必要です。

拡張漢字および利用者定義文字は、3バイトで表現されます。その他の日本語文字は、2バイトで表現されます。

NCHAR_CODE=EUC_U90

または

NCHAR_CODE=EUC

日本語EUCコードのS90コード(COBOL_EUC形式)

Symfoware/RDBのデータベース中の各国語文字列型のデータのコード系です。この文字コード系は、S90コードをCOBOLの内部表現形式である16ビットワイドキャラクタ表現に変換したものです。
拡張漢字および利用者定義文字を含むすべての日本語文字は、2バイトで表現されます。

NCHAR_CODE=COBOL_EUC_S90

日本語EUCコードのU90コード(COBOL_EUC形式)

Symfoware/RDBのデータベース中の各国語文字列型のデータのコード系です。この文字コード系は、U90コードをCOBOLの内部表現形式である16ビットワイドキャラクタ表現に変換したものです。

拡張漢字および利用者定義文字を含むすべての日本語文字は、2バイトで表現されます。

NCHAR_CODE=COBOL_EUC_U90

または

NCHAR_CODE=COBOL_EUC

UNICODE(UCS-2形式)

UNICODEは、世界各国の各国語文字を統一的に扱うことを目的とした、マルチバイトの文字コード系です。

Symfoware/RDBは、UNICODEとして、2バイト固定長形式のUCS-2を各国語文字列型として採用しています。

UCS-2では、すべての文字は2バイトの固定長形式で表現されます。英数字などの1バイト文字も2バイトで表現されます。

NCHAR_CODE=UCS2

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

UCS-2コードをバイトスワップした形式です。

NCHAR_CODE=UCS2B

UNICODE(UTF-8形式)

Symfoware/RDBは、UNICODEとして、UCS-2を1、2、3バイトの可変長にエンコーディングしたUTF-8を文字列型として採用しています。

UTF-8では、英数字および制御文字は1バイトで表現されます。各国語文字は、1文字を2〜6バイトで表現され、Symfoware/RDBはUCS-2と対応する1〜3バイトの文字が扱えます。

NCHAR_CODE=UTF8

シフトJIS
コード

シフトJISコードは、一般にDOS/Windowsや一部のUNIX系システムでも採用されている文字コード系です。シフトJISコードには、Microsoft系のシフトJISコードや各ベンダが拡張したシフトJISコードが存在します。Symfoware/RDBは、Microsoft系のシフトJISコードを採用しています。この文字コード系は、日本語EUCコードのS90コードやUNICODE(UTF-8形式)と高い親和性を持っています。

シフトJISコードでは、英数字および制御文字は1バイトで表現されます。各国語文字列型は、1文字が2バイトで表現されます。

NCHAR_CODE=SJIS

日本語文字コード系を選択することにより、アプリケーション中の日本語文字に対する処理が異なります。たとえば、SQL文に指定する日本語文字列型のホスト変数には、選択した日本語文字コードのデータを設定または参照してデータベースアクセスを行います。

このため、アプリケーションの設計時には、実行時にどの日本語文字コード系を選択するかを決定しておく必要があります。

アプリケーションの実行時には、動作環境ファイルの実行パラメタ“NCHAR_CODE”に選択した日本語文字コード系を表: アプリケーションで選択できる日本語文字コードのように指定してください。指定方法の詳細については、“クライアント用の動作環境ファイルの作成”を参照してください。

■プログラミングでの日本語文字コードの留意

ここでは、選択したそれぞれの日本語文字コードでプログラミングする場合の留意点について説明します。

◆ホスト変数の長

各国語文字列型のデータをデータベースから取得、またはデータベースに格納する場合、日本語文字コードは2バイトとなります。このため、ホスト変数の長さは、以下のように算出してください。

ホスト変数の長さ = 日本語文字数 × 2バイト + 1

ただし、日本語EUCコードの日本語文字を使用する場合は、日本語文字に3バイトの拡張漢字または利用者定義文字を含む可能性があります。このため、ホスト変数の長さは、格納に十分な大きさを考慮して以下のように算出してください。

ホスト変数の長さ = 日本語文字数 × 3バイト + 1

また、UNICODE(UTF-8形式)の日本語文字を使用する場合は、日本語文字コードは2〜6バイトとなります。

ホスト変数の長さ = 日本語文字数 × 6バイト + 1

◆SQL記述子域のオクテット

動的SQLを使用して、各国語文字列型のデータをデータベースから取得する場合、SQL記述子域のオクテット(バイト数)は、1文字を2バイトに換算した値となります。ただし、日本語EUCコードの日本語文字を使用する場合は、取得するデータが2バイト表現の日本語文字か3バイト表現の日本語文字かにかかわらず、SQL記述子域のオクテット長(バイト数)は、1文字を3バイトに換算した値となります。また、UNICODE(UTF-8形式)の日本語文字を使用する場合は、1文字を6バイトに換算した値となります。

◆切捨ておよび補正

データベース中の日本語文字の長さは2バイトです。これに対して日本語EUCコードおよびUNICODE(UTF-8形式)の日本語文字を使用する場合、ホスト変数の長さは、日本語EUCコードは3バイトであり、UNICODE(UTF-8形式)は6バイトです。このため、ホスト変数に日本語文字を設定する、または設定される場合は、日本語文字列の切捨ておよび補が行われます。

ホスト変数への日本語EUCコードおよびUNICODE(UTF-8形式)の日本語文字の設

ホスト変数からデータベースにデータを格納する場合、ホスト変数に設定する日本語文字列の長さがホスト変数の長さよりも短い場合は、有効文字列以外の領域には、英数字の空白を設定してください。なお、日本語の空白は、有効な文字列とみなします。

ホスト変数に設定される日本語EUCコードおよびUNICODE(UTF-8形式)の日本語文

データベースからホスト変数にデータを格納する場合、ホスト変数に設定される日本語EUCコードおよびUNICODE(UTF-8形式)の日本語文字の長さが、ホスト変数の長さよりも短い場合は、有効な文字列以外の領域には英数字の空白が設定されます。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005