本节描述那些检查和操作二进制字符串的函数和操作符,这是类型bytea
的值。
其中许多函数在用途和语法上都与上一节中描述的文本字符串函数等效。
SQL定义了一些使用关键字而不是逗号来分割参数的串函数。详情请见表 9.11。PostgreSQL也提供了这些函数使用常规函数调用语法的版本(参阅表 9.12)。
表 9.11. SQL二进制串函数和操作符
还有一些二进制串处理函数可以使用,在表 9.12列出。 其中有一些是在内部使用,用于实现表 9.11列出的 SQL 标准串函数。
表 9.12. 其他二进制串函数
函数 描述 例子 |
---|
返回二进制字符串中设置的位数(也被认为“popcount”)。
|
从
|
从二进制字符串中提取 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
提供无效的十六进制数据时,包括提供奇数个字符时,会引发错误。