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