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)
例外をスローします。
データを選択するとき、ClickHouseは文字列の末尾のヌルバイトを削除しません。WHERE
句を使用する場合、FixedString
の値に一致させるためにヌルバイトを手動で追加する必要があります。以下の例は、FixedString
でWHERE
句を使用する方法を示しています。
次のFixedString(2)
カラムを持つテーブルを考えます:
クエリSELECT * FROM FixedStringTable WHERE a = 'b'
はデータを返しません。このフィルタパターンをヌルバイトで補完する必要があります。
この動作は、文字列がスペースでパディングされ、出力時にスペースが削除されるCHAR
型のMySQLとは異なります。
FixedString(N)
値の長さは一定であることに注意してください。length関数は、FixedString(N)
値がヌルバイトのみで埋められている場合でもN
を返しますが、empty関数はこの場合1
を返します。