2012-12-10 3 views
7

SQL selectコマンドを設定します。新しいデータベースの作成時に指定されていない場合、どの文字セットが使用されますか? Firebirdのさまざまなバージョン(1.0,2.0,2.5.1など)に違いはありますか?

答えて

13

作成中に文字セットが指定されていない場合のデフォルトの文字セットは、文字セットNONEです(Firebird Webサイトのdocumentation sectionで利用可能)。これはFirebirdの前から(おそらくInterbaseの作成以来)、既存のバージョンにも当てはまりました。ただし、Firebird 2.5では、デフォルトの文字セットを使用せずにデータベースを作成すると、RDB$CHARACTER_SET_NAMEの値はNONEになります。以前のバージョンでこれが違うかどうかは分かりませんが、NULLを報告しても、デフォルトではNONEが使用されています。

あなたが確認したい場合は、単純に文字セットを指定せずにCHARまたはVARCHAR列を持つ基本的なテーブルを作成し、デフォルトを決定するために、次のクエリを使用することができます。

SELECT a.RDB$FIELD_NAME, a.RDB$RELATION_NAME, 
     b.RDB$CHARACTER_SET_ID, c.RDB$CHARACTER_SET_NAME 
FROM RDB$RELATION_FIELDS a 
INNER JOIN RDB$FIELDS b 
    ON b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE 
INNER JOIN RDB$CHARACTER_SETS c 
    ON c.RDB$CHARACTER_SET_ID = b.RDB$CHARACTER_SET_ID 
WHERE RDB$RELATION_NAME = 'TABLE_NAME' 

することができます任意の((VAR)CHAR)フィールドBTWの文字セットを見つけるためにこれを使用してください。

文字セットNONEは、文字セットの前提がないことを意味するため、任意の文字セットでデータを格納できます。ただし、文字セットが明示的に設定されている列に格納したり比較したりすることはできません(おそらく文字セットOCTETS、これについてはわかりません)。

NONEを使用する場合は、データベースに接続するときに常に同じ接続文字セットを使用するか、文字セットNONEを接続文字セットとして使用する場合は、アプリケーション、ドライバ、アクセスコンポーネントまたはプログラミング言語は常に同じエンコーディングを使用します。そうしないと、文字化問題が発生します(文字エンコーディングの問題)。

接続文字セットとしてNONEを使用する場合、追加の問題があります。たとえば、の場合、列のデータはそのまま送信され、受信したデータはとして格納されます。ただし、その列の文字セットでバイトの組み合わせが許可されていない場合を除きます。基本的には、作成されたのと同じ言語環境でデータベースを使用する必要があります。

一般に、あなたが何をしているのか分からない限り、デフォルトの文字セットを明示する方が良いです。

関連する問題