Перейти к основному содержанию
Справочник по клиентскому протоколу пока в разработке.Большинство примеров доступны только на Go.
В этом документе описан бинарный протокол TCP-клиентов ClickHouse.

Varint

Для длин, кодов пакетов и в других случаях используется кодирование unsigned varint. Используйте binary.PutUvarint и binary.ReadUvarint.
Signed varint не используется.

String

Строки переменной длины кодируются как (length, value), где lengthvarint, а value — строка UTF-8.
Проверяйте длину, чтобы избежать OOM:0 ≤ len < MAX
s := "Hello, world!"

// Запись длины строки как uvarint.
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

// Запись значения строки.
buf = append(buf, s...)
00000000  0d 48 65 6c 6c 6f 2c 20  77 6f 72 6c 64 21        |.Hello, world!|

Целые числа

ClickHouse использует Little Endian для целых чисел с фиксированным размером.

Int32

v := int32(1000)

// Кодирование.
buf := make([]byte, 8)
binary.LittleEndian.PutUint32(buf, uint32(v))

// Декодирование.
d := int32(binary.LittleEndian.Uint32(buf))
fmt.Println(d) // 1000
00000000  e8 03 00 00 00 00 00 00                           |........|

Логический тип

Логические значения представлены одним байтом: 1 означает true, а 0false.
Последнее изменение 10 июня 2026 г.