n 位二进制表示的整数,为网络字节顺序(最高有效字节优先,MSB),n 表示该值占用的位数。 如果指定了 i,则 i 是将出现的确切值;如果未指定 i 值,该值是可变的。例如,Int16 表示一个值未指定的占用 16 位二进制位的整数(占用长度为 2 个字节,占用 16 位二进制);Int32(42)表示一个值为 42 的占用 32 位二进制位的整数(占用长度为 4 个字节,占用 32 位二进制)。
Intn[k]
由 k 个 n 位二进制表示的整数组成的数组。数组长度 k 始终由消息中较早的字段确定。
String(s)
以空结尾的字符串(C-style 字符串)。字符串没有特定的长度限制。 如果指定了 s,则 s 是将出现的确切值;如果未指定 s 值,该值是可变的。例如,String 表示一个值未指定的字符串;String("user")表示值为 user 的字符串。 需要注意的是,服务器可以返回的字符串长度没有预定义长度的限制,因此客户端比较好的编码策略是使用可扩展缓冲区,以便可以接收适合内存大小的内容。如果这不可行,请读取整个字符串并丢弃不适合固定大小缓冲区的尾随字符。
Byten(c)
n 个字节。如果字段宽度 n 不是常数,则它总是可以从消息中较早的字段确定。如果指定了 c,则 c 为该字段的精确值。例如,Byte2 表示值未指定的 2 个字节,Byte1('\n')表示值为'\n'的 1 个字节。 除了以上四种数据类型,其他数据类型在 PostgreSQL Protocol v3.0 的消息中均不支持。
三、消息传输的格式和格式码
在 Postgresql Protocole 中,特定数据类型的数据可以用几种不同格式中的任何一种传输。 从 PostgreSQL 7.4(PostgreSQL Protocol v3.0)开始,协议支持的数据传输支持的格式是 text(文本)和 binary(二进制),该协议为将来的扩展做好了准备。任何值传输的格式由格式代码指定。 客户端可以为每个传输的参数值和查询结果的每一列指定格式代码。text 的格式代码为 0,binary 的格式代码是 1,所有其他格式代码都保留以供将来定义。 值的 text 表示是输入/输出转换函数为特定数据类型生成/接受的字符串。在传输 text 的表示中,没有结尾空字符;如果客户端想要将接收到的值作为 C 风格字符串处理,则客户端必须自行将其加 1 个空字符。需要注意的是,text 传输格式的值不允许内嵌空字符。 整数的 binary 表示使用网络字节顺序(最高有效字节优先,MSB)。 值得特别注意的是,复杂数据类型的 binary 表示可能会在服务器版本之间发生变化;因此 text 格式通常是更便携更通用的选择。