Getting Started with Pervasive PSQL (v11)

データのエンコード

エンコードは文字セットを表す標準規格です。文字データは、コンピューターがデジタル処理できる標準形式に変換する、つまりエンコードする必要があります。エンコードは、Pervasive PSQL データベース エンジン(サーバー)と Pervasive PSQL クライアント アプリケーションとの間で規定する必要があります。互換性のあるエンコードを使用すれば、サーバーとクライアントでデータが正しく変換されます。

Pervasive PSQL v11 SP3 では、クライアントとサーバー間のエンコードの複雑性、およびオペレーティング システム、言語、アクセス方法のさまざまな組み合わせへの対処がより改善されました。エンコードの機能拡張は、データベース コード ページとクライアント エンコードに分割されています。この 2 種類のエンコードは、別個のものですが相互に関係しています(表 7 を参照してください)。

2 つのエンコード方法は上級ユーザー向けです。一般的には、デフォルトのエンコード設定で十分であり変更の必要はありません。

データベース コード ページおよびクライアント エンコードは、リレーショナル インターフェイスのみに適用されます。トランザクショナル インターフェイスには影響しません。

ここでは、以下の項目について説明します。

データベース コード ページ

データベース コード ページはデータベース コード ページという新しいプロパティで指定します。このプロパティはデータベースとメタデータに使用するエンコードを識別します。デフォルトのデータベース コード ページは "サーバーのデフォルト" で、データベース エンジン実行中のサーバーのオペレーティング システム(OS)コード ページを意味します(OS のコード ページは一般的に「OS エンコード」と呼ばれ、この章のこれ以降の説明ではこの表現を使用します)。

データベース コード ページは、異なる OS エンコードを使用して Pervasive PSQL DDF を手動で別のプラットフォームへコピーしながら、データベース エンジンにメタデータを正しく変換させたい場合に特に役立ちます。

クライアントのエンコード

クライアントのエンコードは、Pervasive PSQL クライアント上のアプリケーションが使用するデータ エンコードです。アプリケーションは、任意に選択したエンコードでデータを格納することができます。ただし、前に述べたように、データベース エンジンとクライアント アプリケーション間では互換性のあるエンコードを定める必要があります。以前のバージョンの Pervasive PSQL では、データベース エンジンとクライアント間でエンコードの互換性を確実にする方法がありました。

これらの方法は、データベース コード ページを利用するように機能拡張されました。アプリケーションは、Pervasive PSQL クライアントがデータベース コード ページとクライアント アプリケーション間でデータを自動的に変換するように指定することができるようになりました。これは、自動変換と呼びます。ただし、自動変換によって文字を変換するのは、それらの文字が両方のコード ページ(サーバー マシンのコード ページとクライアント マシンのコード ページ)に存在する場合のみであることに注意してください。

自動変換は、クライアント アプリケーションがデータベース エンジンに接続したときに指定されます。『SQL Engine Reference』の 「ODBC 接続文字列」を参照してください。

データの変換は、要求に応じてクライアントで行われます(変換はいつも必要なわけではありません。たとえば、クライアントのオペレーティング システム(OS)エンコードがサーバーの OS エンコードと一致している場合は不要です)。

エンコードの相互の影響

次の表で、データベース コード ページとクライアント エンコード間の相互の影響を説明します。

表 7 データベース エンコードとクライアント エンコード間の相互の影響
データベース エンコードの指定
クライアント アプリケーションの指定
Pervasive PSQL Client
サーバーのデフォルト
自動変換
データおよびメタデータを、サーバーのデフォルトのオペレーティング システム(OS)エンコードから、クライアントの OS エンコードに変換します。
特定のコード ページ
自動変換
データおよびメタデータを、データベース コード ページから、クライアントの OS エンコードに変換します。
サーバーのデフォルト
または
特定のコード ページ
なし(エンコードが指定されていない)
(エンコードが指定されていないのは、Pervasive PSQL v10 SP1 より前のバージョンのデフォルトの動作です。)
クライアント マシンのエンコードでデータをデータベース エンジンに送り、データベース コード ページを無視します。
データ変換の互換性のためには、クライアント マシンで使用するエンコードが、データベースにおけるデータとメタデータのエンコードと一致する必要があります。
サーバーのデフォルト
または
特定のコード ページ
特定のエンコード
クライアント アプリケーションで指定されたエンコードでデータをサーバーに送り、データベース コード ページを無視します。
データ変換の互換性のためには、クライアント アプリケーションで指定するエンコードが、データベースにおけるデータとメタデータのエンコードと一致する必要があります。

データベース内に OEM 文字データがある場合、旧来の解決法は DSN を使用する ODBC のようなアクセス方法を使用して OEM/ANSI 変換を指定することでした。このバージョンでは、データベースに OEM コード ページを設定し、アクセス方法で自動変換を使用することが可能になりました。『SQL Engine Reference』の「エンコード変換」も参照してください。


メモ

データベース エンジンは、アプリケーションがデータベースに追加するデータおよびメタデータのエンコードを検証しません。エンジンは、すべてのデータが、表 7 で説明されているデータベース コード ページを使用して入力されるものと想定しています。


OEM データに使用する旧来の変換

データベース内に OEM 文字データがある場合、旧来の解決法はアクセス方法で OEM/ANSI 変換を指定することでした。ここでは、OEM 文字データを使用する Linux クライアント向けに旧来の方法について説明します。


メモ

旧来の方法は引き続きサポートされますが、前に説明したようにデータベースに OEM コード ページを指定し、アクセス方法で自動変換を使用することをお勧めします。


Btrieve と DTI

Btrieve API または DTI(Distributed Tuning Interface)を使用する場合は、アプリケーションで使用されるローカル エンコードでファイル名とパスを提供する必要があります。Btrieve API や DTI は、サーバーおよびクライアント上の OS エンコード間の相違に対処します。

ODBC

SQL Engine Reference』の 「OEM/ANSI 変換」も参照してください。

ODBC を使用する場合、エンコードは、 Win32 のOSでは SHIFT-JIS を使用してください。

日本語版の Linux は一般的にデフォルトでそのエンコードを EUC-JP または UTF-8 に設定します。

日本語版の Linux を使用している場合、クライアントは別の Linux サーバー(たとえばローカルに)、あるいは Win32 の SHIFT-JIS サーバーに接続できます。Linux サーバーに置かれている SHIFT-JIS にエンコードされたデータベースに接続することも可能です。

以下に示す手順を使用して必要な設定を行ってください。これらのケースは、アプリケーション自体は何も変換を行わず、そのマシンのネイティブのエンコードを使用することを前提としています。

Linux EUC-JP クライアントを Win32 SHIFT-JIS サーバーへ接続させる

このサーバーで受け取るものはすべて SHIFT-JIS でなければいけません。サーバーからクライアントに送られるものはすべて EUC-JP でなければいけません。

これを達成するには、指定のデータベースへの接続に使用する ODBC.INI(デフォルトで /usr/local/psql/etc にあります)内のクライアント DSN 設定が次のようになっている必要があります。

[dbclient] 
Driver=/usr/local/psql/lib/libodbcci.so 
Description=Pervasive ODBC Client Interface:JPN-
2000SERVER:1583/dbclient 
ServerDSN=DEMODATA 
ServerName=JPN-2000SERVER:1583 
TranslationDLL=/usr/local/psql/lib/libxlate.so.10 
TranslationOption=90000932 

TranslationDLL の行は ODBC クライアント インターフェイスが使用する変換ライブラリを指定しています。

TranslationOption の行は、この変換で 9000(EUC-JP)から 0932(SHIFT-JIS)が必要であることを指定しています。

この例を使用すると、クライアントからのすべてのデータがサーバーに送られる前に SHIFT-JIS に変換され、クライアントがサーバーからデータを受け取る前には EUC-JP に変換されます。

Linux UTF-8 クライアントを Win32 SHIFT-JIS サーバーへ接続させる

このサーバーで受け取るものはすべて SHIFT-JIS でなければいけません。サーバーからクライアントに送られるものはすべて UTF-8 でなければいけません。

これを達成するには、指定のデータベースへの接続に使用する ODBC.INI(デフォルトで /usr/local/psql/etc にあります)内のクライアント DSN 設定が次のようになっている必要があります。

[dbclient]  
Driver=/usr/local/psql/lib/libodbcci.so  
Description=Pervasive ODBC Client Interface:JPN-
2000SERVER:1583/dbclient  
ServerDSN=DEMODATA  
ServerName=JPN-2000SERVER:1583  
TranslationDLL=/usr/local/psql/lib/libxlate.so.10  
TranslationOption=90010932  

TranslationDLL の行は ODBC クライアント インターフェイスが使用する変換ライブラリを指定しています。

TranslationOption の行は、この変換で 9001(UTF-8)から 0932(SHIFT-JIS)が必要であることを指定しています。

この例を使用すると、クライアントからのすべてのデータがサーバーに送られる前に SHIFT-JIS に変換され、クライアントがサーバーからデータを受け取る前には UTF-8 に変換されます。

Linux EUC-JP クライアントを Linux EUC-JP サーバーへ接続させる

この設定を使用する場合は、DSN の定義を変更する必要はありません。dsnadd ユーティリティで作成されたままの DSN を使用します。

Linux UTF-8 クライアントを Linux UTF-8 サーバーへ接続させる

この設定を使用する場合は、DSN の定義を変更する必要はありません。dsnadd ユーティリティで作成されたままの DSN を使用します。『Pervasive PSQL User's Guide』の 「dsnadd」を参照してください。

Linux UTF-8 クライアントを Linux EUC-JP サーバーへ接続させる

このサーバーで受け取るものはすべて EUC-JP でなければいけません。サーバーからクライアントに送られるものはすべて UTF-8 でなければいけません。

これを達成するには、指定のデータベースへの接続に使用する ODBC.INI(デフォルトで /usr/local/psql/etc にあります)内のクライアント DSN 設定が次のようになっている必要があります。

[dbclient]  
Driver=/usr/local/psql/lib/libodbcci.so  
Description=Pervasive ODBC Client Interface:JPN-
2000SERVER:1583/dbclient  
ServerDSN=DEMODATA  
ServerName=JPN-2000SERVER:1583  
TranslationDLL=/usr/local/psql/lib/libxlate.so.10  
TranslationOption=90019000  

TranslationDLL の行は ODBC クライアント インターフェイスが使用する変換ライブラリを指定しています。

TranslationOption の行は、この変換で 9001(UTF-8)から 9000(EUC-JP)が必要であることを指定しています。

この例を使用すると、クライアントからのすべてのデータがサーバーに送られる前に EUC-JP に変換され、クライアントがサーバーからデータを受け取る前には UTF-8 に変換されます。

Linux EUC-JP クライアントを Linux EUC-JP サーバーへ接続させる、サーバーにデータを保存する場合は SHIFT-JIS エンコードを使用する

この状況は Win32 エンジンに SHIFT-JIS データベースがある場合に可能ですが、すべてのファイルを Linux EUC-JP サーバーに移動することができます。この場合、そのデータベースは EUC-JP Linux マシンにありますが、DDF ファイル内のすべてのデータおよびデータ ファイルは SHIFT-JIS です。

この場合、DSN は以下のようになります。

[dbclient] 
Driver=/usr/local/psql/lib/libodbcci.so 
Description=Pervasive ODBC Client Interface:JPN-
2000SERVER:1583/dbclient 
ServerDSN=DEMODATA 
ServerName=JPN-2000SERVER:1583 
TranslationDLL=/usr/local/psql/lib/libxlate.so.10 
TranslationOption=90000932 
CodePageConvert=932 

最後の行は、サーバーでは EUC-JP エンコードを使用するが、このサーバー上のデータは SHIFT-JIS として処理することを指定しています。


Windows クライアントから Linux サーバーへの TCP/IP を使用した接続

DOS リクエスターの使用