跳到主要内容
跳到主要内容
编辑此页面

基础知识

注意

客户端协议参考正在进行中。

大多数示例仅使用 Go 语言。

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

Varint

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

注意

不使用有符号 varint。

String

变长字符串编码为 (length, value),其中 length 是 varint,value 是 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!|

Integers

提示

ClickHouse 对固定大小的整数使用 Little Endian。

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

Boolean

布尔值由单个字节表示,1 为 true,0 为 false。