Symfoware Server 解説書 - FUJITSU -
目次 索引 前ページ次ページ

第2章 Symfoware Serverの基礎知識> 2.4 Symfoware Serverのアーキテクチャ

2.4.5 文字コード系

Symfoware Serverで使用できる文字コード系について説明します。

■Symfoware Serverで使用できる文字コード系

Symfoware Serverでは、以下の文字コード系が使用できます。

文字コード系は、以下の観点のもと、データベースシステムを取り巻くシステム全体の文字の扱いや文字の流通性を考慮し、決定してください。

  1. 余分なコード変換によるオーバヘッドの削減

  2. コード変換エラーによるデータ損失を排除

具体的には、システム全体で使用する文字コード系が一つに決まるときには、それをデータベースの文字コード系とします。複数の文字コード系を使用するときには、通常、システム全体を包含するような文字コード系を選択し、できるだけコード変換の回数が少なくなるようにします。

このようにして決定された文字コード系を元にして、次に、Symfoware/RDBを動作させるときのロケールを決めます。このロケールは、UNIX系システムで標準のCロケールを除き、Symfoware/RDBが動作するOSのデフォルトロケールと一致していることが必要です。

Symfoware/RDBのロケールとデータベースに格納するデータの文字コード系との関係を以下に示します。

[表: データベースの文字コード系とSymfoware/RDBのロケールの関係]

 

Symfoware/RDBのロケール(OSのデフォルトロケール)

ja

ja_JP.U90

ja_JP.PCK

ja_JP.UTF-8

C

ja_JP.eucJP

ja_JP.UTF-8

C

日本語

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

EUC_S90

×

×

×

×

EUC_U90

×

×

×

×

SJIS

×

×

UNICODE

◎:組み合わせて運用可能(推奨)
○:組み合わせて運用可能
▲:組み合わせて運用可能(従来互換として存在)
×:組み合わせて運用不可能(インストール時に選択できません)

EUC_S90:日本語EUCコードのS90コード
EUC_U90:日本語EUCコードのU90コード
SJIS:シフトJISコード
UNICODE:UNICODE

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

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

この文字コード系が選択されたとき、Symfoware/RDBは、文字列型(CHARACTER型)はS90コードで格納し、各国語文字列型(NATIONAL CHARACTER型)はS90コードをCOBOL_EUC形式のS90コードに変換して格納します。COBOL_EUC形式のS90コードは、COBOLの内部表現形式である16ビットワイドキャラクタ表現に準拠しています。

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

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

この文字コード系が選択された場合、Symfoware/RDBは、文字列型(CHARACTER型)はU90コードで格納し、各国語文字列型(NATIONAL CHARACTER型)はU90コードをCOBOL_EUC形式のU90コードに変換して格納します。COBOL_EUC形式のU90コードは、COBOLの内部表現形式である16ビットワイドキャラクタ表現に準拠しています。

◆シフトJISコー

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

◆UNICODE

UNICODEは、世界各国の各国語文字を統一的に扱うことを目的とした、マルチバイトの文字コード系です。そのため、UNICODEを使っている限り、言語種別を意識する必要がありません。

また、現存する文字に十分対応できており、日本語の地名や人名などに使用されている特殊な文字も含んでいます。従来のコードには、このような文字は含まれておらず、使用する文字コード系ごとに拡張域を使用して対処していました。このように、UNICODEは非常にまれな文字をも網羅しているという特色を持っています。

Symfoware/RDBは、UNICODEとして、2バイト固定長形式のUNICODE(UCS-2形式)と、UNICODE(UCS-2形式)を1〜3バイトの可変長にエンコーディングしたUNICODE(UTF-8形式)を使用します。

UNICODE(UCS-2形式)は、各国語文字列型(NATIONAL CHARACTER型)のデータに使用します。したがって、英数字のように通常1バイト文字として扱われるデータも2バイトのコードで表現するため、制御文字やASCII文字を各国語文字列型に格納することが可能です。

UNICODE(UTF-8形式)は、文字列型(CHARACTER型)のデータに使用します。UNICODE(UTF-8形式)は、可変長エンコーディング方式を採用しているので、文字のデータ長に注意する必要があります。例えば、日本語文字は通常3バイトで表現されるため、他の文字コード系のデータ長よりも多くの領域が必要となります。

文字コードと格納形式について、以下にまとめます。

文字列型の列は、1文字が可変バイトで表現される形式で格納されます。各国語文字列型の列は、1文字が固定バイトで表現される形式で格納されます。

文字コード系

格納形式

文字列型

各国語文字列型

日本語EUCコードのS90

S90コード

COBOL_EUC形式のS90コード

日本語EUCコードのU90

U90コード

COBOL_EUC形式のU90コード

シフトJISコード

シフトJISコード

シフトJISコード

UNICODE

UNICODE(UTF-8形式)

UNICODE(UCS-2形式)

文字コード系とロケールの関係

データベースに格納するデータの文字コード系は、データベースシステムを取り巻くシステム全体の文字の扱いや文字の流通性を考慮し、決定してください。このようにして決められた文字コード系を元にして、ロケールを決定します。一般的にロケールと文字コード系は同一のものを選択することによって、不要な文字化けなどの問題を回避できるため、扱いやすくなります。

Symfoware/RDBのロケールは、UNIX系システムで標準のCロケールを除き、OSのデフォルトロケールと同一であることが必要です。Symfoware/RDBのロケールは、Symfoware Serverインストール時のOSのデフォルトロケールを適用するようになっています。この時、Symfoware/RDBのロケールに対応して、Symfoware/RDBの文字コード系が決定します。

プロセスが使用する資源の文字コード系は、プロセスのロケールによって決まるのが一般的です。Symfoware/RDBプロセスにおいても、使用する資源の文字コード系は、Symfoware/RDBのロケールにより決まります。したがって、Symfoware/RDBが使用する資源は、そのロケールの文字コード系に合わせることが必要です。

通常、UNIX系システムのロケールは以下のように記述されます。

ロケールの記述形式

言語_国または地域.文字コード系

言語が日本語、国または地域が日本国、文字コード系がUNICODEの場合、以下のようにロケールを表現します。
ja_JP.UTF-8
特殊な記述形式としてUNIX系システムで標準のCロケールがあります。Cロケールは、言語、国または地域、文字コード系を明に指定しない形式です。Symfoware/RDBでは、Cロケールが指定されたとき、Symfoware/RDBをインストールしたときに設定される文字コード系を採用します。
例えば、ロケールがC、文字コード系がUNICODEのとき、Symfoware/RDBが出力するエラーメッセージはUNICODEの文字コード系かつ英語言語で表示されます。

■RDBコマンドのロケールと文字コード系

RDBコマンドを実行すると、RDBコマンドプロセスが起動され、Symfoware/RDBプロセスと通信路を確立し、情報をやり取りしながら処理を行います。このとき、RDBコマンドのロケールは、UNIX系システムで標準のCロケールを除き、Symfoware/RDBのロケールと同一でなければなりません。RDBコマンドのロケールとSymfoware/RDBのロケールが異なる場合は、RDBコマンドは異常終了します。

プロセスが使用する資源の文字コード系は、プロセスのロケールによって決まるのが一般的です。RDBコマンドプロセスにおいても、使用する資源の文字コード系は、RDBコマンドのロケールにより決まります。したがって、RDBコマンドが使用する資源は、そのロケールの文字コード系に合わせることが必要です。

RDBコマンドが以下のロード/アンロード系のコマンドの場合、データベースに格納されるデータの文字コード系と異なる文字コード系を使用して処理することが可能です。これは、テキスト形式の外部ファイルデータを使用する場合に、RDBコマンドのオプションで指定することが可能となります。

【対象コマンド】

オプションの指定方法の詳細は、“コマンドリファレンス”を参照してください。

このように、データベースに格納されるデータの文字コード系と、ロードやアンロードで指定する外部ファイルデータの文字コード系が異なる場合は、Symfoware Serverが自動的にコード変換を行います。

ロード/アンロードコマンドのコード変換については、“RDB運用ガイド”を参照してください。

■アプリケーションのロケールと文字コード系

アプリケーションのロケールは、以下のように指定します。

[表: アプリケーションのロケールの指定]

対象OS

C言語(COBOL以外の言語)

COBOL言語


環境変数LANGでロケールを指定します。

OSのデフォルトロケールと同一のロケールを環境変数LANGで指定します。

インストール時に指定されたロケールに従います。


アプリケーションのプロセスの文字コード系は、アプリケーションのロケールによって決まります。通常、UNIX系システムにおいてはロケールは以下の記述形式です。アプリケーションは、ロケールに指定された文字コード系で動作します。

◆ロケールの記述形式

ロケールの記述形式は、以下のようになります。

言語_国または地域.文字コード系

言語が日本語、国または地域が日本国、文字コード系がUNICODEの場合、以下のようにロケールを表現します。
ja_JP.UTF-8

アプリケーションのロケールには、UNIX系システムで標準のCロケールを指定することも可能です。Cロケールの場合、文字コード系はSymfoware/RDBに指定されたデフォルトの文字コード系で動作します。アプリケーションのデフォルトの文字コード系は、アプリケーションが動作する環境により決まります。

アプリケーションが動作する環境

アプリケーションのデフォルトの文字コード系

Symfoware/RDBと同一サーバのアプリケーション

Symfoware/RDBインストール時のデータベースの文字コード系

Connection Managerを利用するアプリケーション

Connectoin Managerインストール時の文字コード系

クライアント端末のアプリケーション

Symfoware Serverクライアント機能インストール時の文字コード系

Windows系システムにおいては、デフォルトの文字コード系はシフトJISコードが採用されます。

アプリケーション内で使用するホスト変数、動的パラメタ、および、SQLMSGの文字コード系を変更することができます。この変更操作は、クライアント用の動作環境ファイルのCHAR_SET、NCHAR_CODE、または、アプリケーションのコンパイル時にオプションで行います。

[表:文字コード系の変更]

対象OS

C言語(COBOL以外の言語)

COBOL言語


クライアント用の動作環境ファイルに以下のパラメタを指定します。

  • CHAR_SET

  • NCHAR_CODE

変更できません。
COBOL言語の仕様であり、アプリケーションはロケールに一致する文字コード系で処理します。

SQL埋込みアプリケーションをプレコンパイルするときに-unオプションで指定します。

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

コード変換が行われる文字コード系の関係については、“アプリケーション開発ガイド(埋込みSQL編)”を参照してください。

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

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