Тип `FixedString` эффективен, когда данные имеют длину ровно `N` байт. Во всех остальных случаях использование FixedString может привести к снижению эффективности.
Примеры значений, которые можно эффективно хранить в столбцах типа `FixedString`:
- Двоичное представление IP-адреса (`FixedString(16)` для IPv6).
- Коды языков (ru_RU, en_US ... ).
- Коды валют (USD, RUB ... ).
- Двоичное представление хэшей (`FixedString(16)` для MD5, `FixedString(32)` для SHA256).
Для хранения значений UUID используйте тип данных [UUID](uuid.md).
При вставке данных, ClickHouse:
- Дополняет строку нулевыми байтами, если строка содержит меньше байтов, чем `N`.
- Генерирует исключение `Too large value for FixedString(N)`, если строка содержит более `N` байт.
При выборе данных ClickHouse не обрезает нулевые байты в конце строки. Если вы используете секцию `WHERE`, то необходимо добавлять нулевые байты вручную, чтобы ClickHouse смог сопоставить выражение из фильтра значению `FixedString`. Следующий пример показывает, как использовать секцию `WHERE`с`FixedString`.
Рассмотрим следующую таблицу с единственным столбцом типа `FixedString(2)`:
Это поведение отличается от поведения MySQL для типа `CHAR`, где строки дополняются пробелами, а пробелы перед выводом вырезаются.
Обратите внимание, что длина значения `FixedString(N)` постоянна. Функция [length](../query_language/functions/array_functions.md#array_functions-length) возвращает `N` даже если значение `FixedString(N)` заполнено только нулевыми байтами, однако функция [empty](../query_language/functions/string_functions.md#string_functions-empty) в этом же случае возвращает `1`.