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)例外をスローします。
次のような、単一の 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文字を指定する必要が生じる場合があります。