Skip to main content
Edit this page

FixedString(N)

Nバイトの固定長の文字列(文字やコードポイントではありません)。

FixedString型のカラムを宣言するには、以下の構文を使用します。

<column_name> FixedString(N)

ここで、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値に一致させるため、手動でヌルバイトを追加する必要があります。以下の例は、FixedStringWHERE句をどのように使用するかを示しています。

次の単一のFixedString(2)カラムを含むテーブルを考えてみましょう。

┌─name──┐
│ b │
└───────┘

クエリ SELECT * FROM FixedStringTable WHERE a = 'b' はデータを返しません。フィルタパターンをヌルバイトで補完する必要があります。

SELECT * FROM FixedStringTable
WHERE a = 'b\0'
┌─a─┐
│ b │
└───┘

この動作は、MySQLのCHAR型とは異なります(そこでは文字列はスペースでパディングされ、出力の際にはスペースは削除されます)。

FixedString(N)の値の長さは一定であることに注意してください。length関数は、FixedString(N)の値がヌルバイトのみで埋められていてもNを返しますが、empty関数はこの場合に1を返します。