本节描述那些检查和操作二进制字符串的函数和操作符,这是类型bytea的值。
其中许多函数在用途和语法上都与上一节中描述的文本字符串函数等效。
SQL定义了一些使用关键字而不是逗号来分割参数的字符串函数。详情请见表 9.11。PostgreSQL也提供了这些函数使用常规函数调用语法的版本(参阅表 9.12)。
表 9.11. SQL 二进制字符串函数和操作符
还有一些二进制串处理函数可以使用,在表 9.12列出。 其中有一些是在内部使用,用于实现表 9.11列出的SQL标准串函数。
表 9.12. 其他二进制串函数
函数 描述 例子 |
|---|
返回二进制字符串中设置的位数(也被称为 “popcount”)。
|
|
计算二进制字符串的 CRC-32 值。
|
|
计算二进制字符串的 CRC-32C 值。
|
从二进制字符串中提取 n'th 位。
|
从二进制字符串中提取 n'th 字节。
|
|
返回二进制字符串中的字节数。
|
返回二进制字符串中的字符数,假设它是给定
|
|
计算二进制字符串的 MD5 hash,结果以十六进制形式写入。
|
|
反转二进制字符串中字节的顺序。
|
设置二进制字符串中的n'th位为
|
设置二进制字符串中的 n'th 字节为
|
|
计算二进制字符串的 SHA-224 hash。
|
|
计算二进制字符串的 SHA-256 hash。
|
|
计算二进制字符串的 SHA-384 hash。
|
|
计算二进制字符串的 SHA-512 hash。
|
从
|
函数get_byte和set_byte把一个二进制串中的一个字节计数为字节 0。
函数get_bit和set_bit在每一个字节中从右边起计数位;
例如位 0 是第一个字节的最低有效位,而位 15 是第二个字节的最高有效位。
由于历史原因,函数md5返回的是一个十六进制编码的text值,而SHA-2函数返回类型bytea。
可以使用函数encode和decode在两者之间转换。
例如encode(sha256('abc'),'hex')可以得到一个十六进制编码的文本表示,或者decode(md5('abc'), 'hex')得到一个bytea值。
用于在不同字符集(编码)之间转换字符串的函数,以及用于以文本形式表示任意二进制数据的函数,在表 9.13中显示。
对于这些函数,类型为text的参数或结果表示为数据库的默认编码,而类型为bytea的参数或结果表示为由另一个参数命名的编码。
表 9.13. Text/Binary String Conversion Functions
函数 描述 示例 |
|---|
将表示编码
|
将表示编码
|
将
|
将二进制数据编码成文本表示;支持的
|
从文本表示中解码二进制数据;支持的
|
encode和decode函数支持以下文本格式:
base64格式是RFC
2045第6.8节中描述的。根据RFC,编码行在76个字符处换行。
然而,与MIME CRLF换行符不同,结尾只使用换行符。
decode函数会忽略回车、换行、空格和制表符。
否则,当decode提供无效的base64数据时,包括尾部填充不正确时,会引发错误。
escape格式将零字节和高位设置的字节转换为八进制转义序列
(\nnn),并将反斜杠加倍。
其他字节值会直接表示。如果反斜杠后面不是第二个反斜杠或三个八进制数字,则decode函数会引发错误;
它会接受其他字节值不变。
hex格式将每4位数据表示为一个十六进制数字,0到f,
先写入每个字节的高阶数字。 encode函数以小写输出a-f十六进制数字。
因为数据的最小单位是8位,所以encode总是返回偶数个字符。
decode函数接受a-f字符的大小写。
当decode提供无效的十六进制数据时,包括提供奇数个字符时,会引发错误。
此外,可以将整数值转换为 bytea 类型,反之亦然。
将整数转换为 bytea 会生成 2、4 或 8 字节,具体取决于
整数类型的宽度。结果是整数的二进制补码表示,最高有效字节在前。
一些示例:
1234::smallint::bytea \x04d2 cast(1234 as bytea) \x000004d2 cast(-1234 as bytea) \xfffffb2e '\x8000'::bytea::smallint -32768 '\x8000'::bytea::integer 32768
将 bytea 转换为整数时,如果 bytea 的长度超过
整数类型的宽度,将会引发错误。