FixedString(N)
Строка фиксированной длины N
байт (не символов и не кодовых точек).
Чтобы объявить колонку типа FixedString
, используйте следующий синтаксис:
Где N
- натуральное число.
Тип FixedString
эффективен, когда данные имеют длину ровно N
байт. В остальных случаях это может привести к снижению эффективности.
Примеры значений, которые можно эффективно хранить в колонках типа FixedString
:
- Двоичное представление IP-адресов (
FixedString(16)
для IPv6). - Коды языков (ru_RU, en_US ... ).
- Коды валют (USD, RUB ... ).
- Двоичное представление хешей (
FixedString(16)
для MD5,FixedString(32)
для SHA256).
Чтобы хранить значения UUID, используйте тип данных UUID.
При вставке данных ClickHouse:
- Дополняет строку нулевыми байтами, если строка содержит менее
N
байт. - Выбрасывает исключение
Too large value for FixedString(N)
, если строка содержит болееN
байт.
Рассмотрим следующую таблицу с единственной колонкой FixedString(2)
:
Обратите внимание, что длина значения FixedString(N)
постоянна. Функция length возвращает N
, даже если значение FixedString(N)
заполнено только нулевыми байтами, но функция empty возвращает 1
в этом случае.
Выбор данных с условием WHERE
возвращает различные результаты в зависимости от того, как задано условие:
- Если используется оператор равенства
=
или==
или функцияequals
, ClickHouse не учитывает символ\0
, т.е. запросыSELECT * FROM FixedStringTable WHERE name = 'a';
иSELECT * FROM FixedStringTable WHERE name = 'a\0';
возвращают один и тот же результат. - Если используется оператор
LIKE
, ClickHouse учитывает символ\0
, поэтому может потребоваться явно указать символ\0
в условии фильтра.