Pular para o conteúdo principal
Uma string de tamanho fixo de N bytes (nem caracteres nem pontos de código). Para declarar uma coluna do tipo FixedString, use a seguinte sintaxe:
<column_name> FixedString(N)
Onde N é um número natural. O tipo FixedString é eficiente quando os dados têm comprimento exato de N bytes. Em todos os outros casos, ele provavelmente reduz a eficiência. Exemplos de valores que podem ser armazenados com eficiência em colunas do tipo FixedString:
  • A representação binária de endereços IP (FixedString(16) para IPv6).
  • Códigos de idioma (ru_RU, en_US … ).
  • Códigos de moeda (USD, RUB … ).
  • A representação binária de hashes (FixedString(16) para MD5, FixedString(32) para SHA256).
Para armazenar valores UUID, use o tipo de dados UUID. Ao inserir dados, o ClickHouse:
  • Completa uma string com bytes nulos se ela contiver menos de N bytes.
  • Lança a exceção Too large value for FixedString(N) se a string contiver mais de N bytes.
Considere a tabela a seguir com uma única coluna FixedString(2):

INSERT INTO FixedStringTable VALUES ('a'), ('ab'), ('');
SELECT
    name,
    toTypeName(name),
    length(name),
    empty(name)
FROM FixedStringTable;
┌─name─┬─toTypeName(name)─┬─length(name)─┬─empty(name)─┐
│ a    │ FixedString(2)   │            2 │           0 │
│ ab   │ FixedString(2)   │            2 │           0 │
│      │ FixedString(2)   │            2 │           1 │
└──────┴──────────────────┴──────────────┴─────────────┘
Observe que o comprimento do valor FixedString(N) é constante. A função length retorna N mesmo que o valor FixedString(N) esteja preenchido apenas com bytes nulos, mas a função empty retorna 1 nesse caso. A seleção de dados com a cláusula WHERE retorna resultados diferentes, dependendo de como a condição é especificada:
  • Se forem usados o operador de igualdade = ou == ou a função equals, o ClickHouse não leva o caractere \0 em consideração, ou seja, as consultas SELECT * FROM FixedStringTable WHERE name = 'a'; e SELECT * FROM FixedStringTable WHERE name = 'a\0'; retornam o mesmo resultado.
  • Se a cláusula LIKE for usada, o ClickHouse leva o caractere \0 em consideração, portanto pode ser necessário especificar explicitamente o caractere \0 na condição de filtro.
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"}
Última modificação em 10 de junho de 2026