firebird データベースのすべての varchar 列を UTF8 に変更していますが、varchar サイズの違いがわかりません。
たとえば、文字セットと照合を何も設定しない場合、varchar サイズを 255 に設定できます。文字セットと照合を UTF8 に設定すると、varchar を 255 に設定すると、異なる値が読み取られます。
UTF8 の varchar(255) に相当する varchar サイズは?
フィールドに 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 バイトのサイズになります。