5

firebird データベースのすべての varchar 列を UTF8 に変更していますが、varchar サイズの違いがわかりません。

たとえば、文字セットと照合を何も設定しない場合、varchar サイズを 255 に設定できます。文字セットと照合を UTF8 に設定すると、varchar を 255 に設定すると、異なる値が読み取られます。

UTF8 の varchar(255) に相当する varchar サイズは?

4

1 に答える 1

8

フィールドに UTF8 文字セットを使用するには、UTF8 文字用VARCHAR(N)に十分なスペースを予約する必要がありますN。このような 1 文字の長さは 1 から 4 の間である可能性があるため、唯一の安全策は、Nそれぞれの長さ 4 の文字を許可することです。つまり、50 文字を格納するには 200 バイトのスペースが必要です (最悪の場合)。

内部を確認するには、 FlameRobinツールを使用できます。テーブルがあるとしましょう

CREATE TABLE "TableÅÄÖåäö"
(
  "ColÅÄÖåäö" Varchar(50)
);

デフォルトの文字セット UTF8 のデータベースで。(これには、少なくとも Firebird 2.0 が必要であることに注意してください。)

システム テーブルには、すべての関係とそのフィールドに関する情報が格納されます。システム テーブルRDB$RELATION_FIELDSには、このフィールドのレコードがあり、(たとえば)RDB$1としてRDB$FIELD_SOURCE. を調べると、RDB$FIELDSのレコードが 1 つRDB$1あり、その値RDB$FIELD_LENGTHは 200 です。

あなたの質問に答えるには: 255 文字のスペースを持つ UTF8 列を作成するには、 として入力しVARCHAR(255)ますが、データベースでは 1020 バイトのサイズになります。

于 2009-05-05T08:06:37.477 に答える