> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по типу данных FixedString в ClickHouse

# FixedString(N)

Строка фиксированной длины размером `N` байт (не символов и не кодовых точек).

Чтобы объявить столбец типа `FixedString`, используйте следующий синтаксис:

```sql theme={null}
<column_name> FixedString(N)
```

Где `N` — натуральное число.

Тип `FixedString` эффективен, когда длина данных составляет ровно `N` байт. Во всех остальных случаях он, скорее всего, снижает производительность.

Примеры значений, которые можно эффективно хранить в столбцах типа `FixedString`:

* Двоичное представление IP-адресов (`FixedString(16)` для IPv6).
* Коды языков (ru\_RU, en\_US ... ).
* Коды валют (USD, RUB ... ).
* Двоичное представление хешей (`FixedString(16)` для MD5, `FixedString(32)` для SHA256).

Для хранения значений UUID используйте тип данных [UUID](/ru/reference/data-types/uuid).

При вставке данных ClickHouse:

* Дополняет строку null-байтами, если строка содержит меньше `N` байт.
* Генерирует исключение `Too large value for FixedString(N)`, если строка содержит больше `N` байт.

Рассмотрим следующую таблицу с единственным столбцом `FixedString(2)`:

```sql theme={null}

INSERT INTO FixedStringTable VALUES ('a'), ('ab'), ('');
```

```sql theme={null}
SELECT
    name,
    toTypeName(name),
    length(name),
    empty(name)
FROM FixedStringTable;
```

```text theme={null}
┌─name─┬─toTypeName(name)─┬─length(name)─┬─empty(name)─┐
│ a    │ FixedString(2)   │            2 │           0 │
│ ab   │ FixedString(2)   │            2 │           0 │
│      │ FixedString(2)   │            2 │           1 │
└──────┴──────────────────┴──────────────┴─────────────┘
```

Обратите внимание, что длина значения `FixedString(N)` постоянна. Функция [length](/ru/reference/functions/regular-functions/array-functions#length) возвращает `N`, даже если значение `FixedString(N)` заполнено только null-байтами, однако функция [empty](/ru/reference/functions/regular-functions/array-functions#empty) в этом случае возвращает `1`.

При выборке данных с помощью предложения `WHERE` результаты могут различаться в зависимости от того, как задано условие:

* Если используется оператор равенства `=` или `==` либо функция `equals`, ClickHouse *не* учитывает символ `\0`, то есть запросы `SELECT * FROM FixedStringTable WHERE name = 'a';` и `SELECT * FROM FixedStringTable WHERE name = 'a\0';` возвращают одинаковый результат.
* Если используется предложение `LIKE`, ClickHouse *учитывает* символ `\0`, поэтому в условии фильтрации может потребоваться явно указать символ `\0`.

```sql theme={null}
SELECT name
FROM FixedStringTable
WHERE name = 'a'
FORMAT JSONStringsEachRow

{"name":"a\u0000"}

SELECT name
FROM FixedStringTable
WHERE name = 'a\0'
FORMAT JSONStringsEachRow

{"name":"a\u0000"}

SELECT name
FROM FixedStringTable
WHERE name = 'a'
FORMAT JSONStringsEachRow

Query id: c32cec28-bb9e-4650-86ce-d74a1694d79e

{"name":"a\u0000"}

SELECT name
FROM FixedStringTable
WHERE name LIKE 'a'
FORMAT JSONStringsEachRow

0 rows in set.

SELECT name
FROM FixedStringTable
WHERE name LIKE 'a\0'
FORMAT JSONStringsEachRow

{"name":"a\u0000"}
```
