10

SQLselectコマンド

SELECT a.RDB$CHARACTER_SET_NAME FROM RDB$DATABASE a

NULLを返します。新しいデータベースを作成するときに指定されていない場合、どの文字セットが使用されますか?Firebirdのさまざまなバージョン(1.0、2.0、2.5.1など)に違いはありますか?

4

1 に答える 1

18

作成時に文字セットが指定されなかった場合のデータベースのデフォルトの文字セットは character set ですNONE。Interbase 6.0 Data Definition Guide の 47 ページを参照してください ( firebird Web サイトのドキュメント セクションにあります)。これは Firebird 以前から (おそらく Interbase が作成されてから) 行われており、既存のバージョンにも適用されます。ただし、Firebird 2.5 では、データベースがデフォルトの文字セットなしで作成されるRDB$CHARACTER_SET_NAMEと、値が になりますNONENONEこれが以前のバージョンで異なっていたかどうかはわかりませんNULL.

確認したい場合は、文字セットを指定せずに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接続文字セットとして使用すると、追加の問題があります。たとえば、列のデータは常にそのまま送信され、列の文字セットでバイトの組み合わせが許可されていない場合を除いて、受信したとおりに保存されます。基本的には、データベースが作成されたのと同じ言語環境でデータベースを使用する必要があることを意味します。

一般に、自分が何をしているのかわからない限り、デフォルトの文字セットについて明示する方がよいでしょう。

于 2012-12-10T19:36:53.520 に答える