Passer au contenu principal
La référence du protocole client est en cours.La plupart des exemples sont uniquement en Go.
Ce document décrit le protocole binaire pour les clients TCP de ClickHouse.

Varint

Pour les longueurs, les codes de paquets et dans d’autres cas, l’encodage varint non signé est utilisé. Utilisez binary.PutUvarint et binary.ReadUvarint.
Le varint signé n’est pas utilisé.

String

Les chaînes de longueur variable sont encodées sous la forme (length, value), où length est un varint et value une chaîne UTF-8.
Vérifiez la longueur pour éviter une OOM :0 ≤ len < MAX
s := "Hello, world!"

// Écriture de la longueur de la chaîne en uvarint.
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

// Écriture de la valeur de la chaîne.
buf = append(buf, s...)
00000000  0d 48 65 6c 6c 6f 2c 20  77 6f 72 6c 64 21        |.Hello, world!|

Entiers

ClickHouse utilise Little Endian pour les entiers à taille fixe.

Int32

v := int32(1000)

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

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

Booléen

Les booléens sont représentés par un octet unique : 1 correspond à true et 0 à false.
Dernière modification le 25 juin 2026