Pular para o conteúdo principal
A referência do protocolo de cliente ainda está em desenvolvimento.A maioria dos exemplos está disponível apenas em Go.
Este documento descreve o protocolo binário para clientes TCP do ClickHouse.

Varint

Para comprimentos, códigos de pacote e outros casos, usa-se a codificação varint sem sinal. Use binary.PutUvarint e binary.ReadUvarint.
Varint com sinal não é usado.

String

Strings de comprimento variável são codificadas como (comprimento, valor), em que comprimento é varint e valor é uma string UTF-8.
Valide o comprimento para evitar OOM:0 ≤ len < MAX
s := "Hello, world!"

// Escreve o comprimento da string como uvarint.
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

// Escreve o valor da string.
buf = append(buf, s...)
00000000  0d 48 65 6c 6c 6f 2c 20  77 6f 72 6c 64 21        |.Hello, world!|

Inteiros

O ClickHouse usa Little Endian para inteiros de tamanho fixo.

Int32

v := int32(1000)

// Codificar.
buf := make([]byte, 8)
binary.LittleEndian.PutUint32(buf, uint32(v))

// Decodificar.
d := int32(binary.LittleEndian.Uint32(buf))
fmt.Println(d) // 1000
00000000  e8 03 00 00 00 00 00 00                           |........|

Booleano

Os valores booleanos são representados por um único byte: 1 é true e 0 é false.
Última modificação em 10 de junho de 2026