8.4. 二进制数据类型

您所在的位置:网站首页 binary是什么类型 8.4. 二进制数据类型

8.4. 二进制数据类型

2024-06-10 01:47| 来源: 网络整理| 查看: 265

8.4.2. bytea的转义格式

“转义”格式是bytea类型的传统PostgreSQL格式。它采用将二进制串表示成ASCII字符序列的方法,而将那些无法用ASCII字符表示的字节转换成特殊的转义语句。从应用的角度来看,如果将字节表示为字符有意义,那么这种表示将很方便。但是在实际中,这常常是令人困扰的,因为它使二进制串和字符串之间的区别变得模糊,并且这种特别的转义机制也有点难于处理。因此这种格式可能会在大部分新应用中避免使用。

在转义模式下输入bytea值时,某些值的字节必须被转义,而所有的字节值都可以被转义。通常,要转义一个字节,需要把它转换成与它的三位八进制值, 并且前导一个反斜线(或者两个反斜线,如果使用转义串语法将值写成一个字面含义)。反斜线本身(字节值92)也可以用双写的反斜线表示。表 8.7显示了必须被转义的字符,并给出了可以使用的替代转义序列。

表 8.7. bytea文字转义字节

十进制字节值描述转义输入表示例子输出表示00字节E'\\000'SELECT E'\\000'::bytea;\00039单引号''''或E'\\047'SELECT E'\''::bytea;'92反斜线E'\\\\'或E'\\134'SELECT E'\\\\'::bytea;\\0到31和127到255“不可打印的”字节E'\\xxx'(八进制值)SELECT E'\\001'::bytea;\001

转义“不可打印的”字节的要求取决于区域设置。在某些实例中,你可以不理睬它们,让它们保持未转义的状态。注意在表 8.7的每一个例子中的结果的长度正好是一个字节,即使其输出表示有时超过一个字符。

如表 8.7中所示,要求多个反斜线的原因是写成一个串文字的输入串在PostgreSQL服务器中必须经过两个分析阶段。每一对中的第一个反斜线被串文字分析器(假设使用了转义串语法)解释为一个转义字符并且因此被消耗,只留下该对中的第二个反斜线(美元符号包围的串可以被用于防止这一层的转义)。剩下的反斜线接着被bytea输入函数识别为开始一个三位八进制值或转义另一个反斜线。例如,一个传递给服务器的串文字是E'\\001',它在通过转义串分析器后变成\001。\001接着被送给bytea输入函数,这里它被转换成一个十进制值为1的单字节。注意单引号字符串不会被bytea特殊对待,因此它遵循串文字的正常规则(参见第 4.1.2.1 节)。

Bytea字节有时在输出时被转义。通常,每一个“不可打印的”字节会被转换成与之等效的三位八进制值并且前置一个反斜线。大部分“可打印的”字节被表示为它们在客户端字符集中的标准表示形式。十进制值为92(反斜线)的字节在输出时被双写。详情请见表 8.8。

表 8.8. bytea输出转义字节

十进制字节值描述转义的输出表示例子输出结果92反斜线\\SELECT E'\\134'::bytea;\\0到31和127到255“不可打印的”字节\xxx(八进制值)SELECT E'\\001'::bytea;\00132到126“可打印的”字节客户端字符集表示SELECT E'\\176'::bytea;~

根据你使用的PostgreSQL前端,你在转义和未转义bytea串方面可能需要做额外的工作。例如,如果你的接口自动翻译换行和回车,你可能也不得不转义它们。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3