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