FixedString(N)
N バイトの固定長文字列(文字やコードポイントではない)。
FixedString 型のカラムを宣言するには、以下の構文を使用します:
ここで、N は自然数です。
FixedString 型は、データの長さが正確に N バイトである場合に効率的です。それ以外のすべてのケースでは、効率性が低下する可能性があります。
FixedString 型のカラムに効率的に格納できる値の例:
- IP アドレスのバイナリ表現(IPv6 用の
FixedString(16))。 - 言語コード(ru_RU, en_US ...)。
- 通貨コード(USD, RUB ...)。
- ハッシュのバイナリ表現(MD5 用の
FixedString(16)、SHA256 用のFixedString(32))。
UUID 値を格納するには、UUID データ型を使用します。
データを挿入する際、ClickHouse は:
- 文字列が
Nバイト未満の場合、文字列にヌルバイトを追加します。 - 文字列が
Nバイトより大きい場合にToo large value for FixedString(N)例外をスローします。
次のテーブルは、1つの FixedString(2) カラムを持っています:
FixedString(N) 値の長さは一定であることに注意してください。length 関数は、FixedString(N) 値がヌルバイトだけで埋められている場合でも N を返しますが、empty 関数はこの場合 1 を返します。
WHERE 節を使用してデータを選択すると、条件が指定される方法によって異なる結果が返されます:
- 等号演算子
=または==またはequals関数が使用される場合、ClickHouse は\0文字を考慮しません。つまり、クエリSELECT * FROM FixedStringTable WHERE name = 'a';とSELECT * FROM FixedStringTable WHERE name = 'a\0';は同じ結果を返します。 LIKE節が使用される場合、ClickHouse は\0文字を考慮するため、フィルタ条件に明示的に\0文字を指定する必要があるかもしれません。