跳至主要内容

基础

注意

客户端协议参考正在开发中。

大多数示例仅以 Go 语言提供。

本文档描述了 ClickHouse TCP 客户端的二进制协议。

可变长度整数

对于长度、数据包代码和其他情况,使用无符号可变长度整数编码。使用 binary.PutUvarintbinary.ReadUvarint

注意

不使用有符号可变长度整数。

字符串

可变长度字符串编码为(长度,值),其中长度可变长度整数为 utf8 字符串。

信息

验证长度以防止 OOM

0 ≤ len < MAX

s := "Hello, world!"

// Writing string length as uvarint.
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

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

整数

提示

ClickHouse 使用小端序表示固定大小的整数。

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                           |........|

布尔值

布尔值由单个字节表示,1 表示true0 表示false