{"kind": "type", "slug": "bytea", "name": "bytea", "major": "18", "snapshot": {"casts": [{"castfunc": "bytea(int2)", "castmethod": "f", "castsource": "int2", "casttarget": "bytea", "castcontext": "e"}, {"castfunc": "bytea(int4)", "castmethod": "f", "castsource": "int4", "casttarget": "bytea", "castcontext": "e"}, {"castfunc": "bytea(int8)", "castmethod": "f", "castsource": "int8", "casttarget": "bytea", "castcontext": "e"}, {"castfunc": "int2(bytea)", "castmethod": "f", "castsource": "bytea", "casttarget": "int2", "castcontext": "e"}, {"castfunc": "int4(bytea)", "castmethod": "f", "castsource": "bytea", "casttarget": "int4", "castcontext": "e"}, {"castfunc": "int8(bytea)", "castmethod": "f", "castsource": "bytea", "casttarget": "int8", "castcontext": "e"}, {"castfunc": "0", "castmethod": "b", "castsource": "pg_ndistinct", "casttarget": "bytea", "castcontext": "i"}, {"castfunc": "0", "castmethod": "b", "castsource": "pg_dependencies", "casttarget": "bytea", "castcontext": "i"}, {"castfunc": "0", "castmethod": "b", "castsource": "pg_mcv_list", "casttarget": "bytea", "castcontext": "i"}], "facts": [{"label": "目录名称", "value": "pg_catalog.bytea"}, {"label": "类型 OID", "value": "17"}, {"label": "类型种类", "value": "基础类型"}, {"label": "声明长度", "value": "变长（varlena）"}, {"label": "存储策略", "value": "扩展"}, {"label": "输入函数", "value": "byteain"}, {"label": "输出函数", "value": "byteaout"}, {"label": "手册中的声明", "value": "bytea"}, {"label": "存储大小", "value": "1 或 4 字节，加上实际二进制串"}, {"label": "手册说明", "value": "变长二进制串"}], "ranges": [], "aliases": [], "catalog": {"oid": "17", "descr": "variable-length string, binary values escaped", "typacl": "_null_", "typlen": "-1", "typelem": "0", "typname": "bytea", "typsend": "byteasend", "typtype": "b", "typalign": "i", "typarray": "0", "typbyval": "f", "typdelim": "','", "typinput": "byteain", "typmodin": "-", "typndims": "0", "typowner": "POSTGRES", "typrelid": "0", "typmodout": "-", "typoutput": "byteaout", "typtypmod": "-1", "typanalyze": "-", "typdefault": "_null_", "typnotnull": "f", "typreceive": "bytearecv", "typstorage": "x", "typbasetype": "0", "typcategory": "U", "typcollation": "0", "typisdefined": "t", "typnamespace": "pg_catalog", "typsubscript": "-", "typdefaultbin": "_null_", "array_type_oid": "1001", "typispreferred": "f", "array_type_name": "_bytea"}, "related": [{"url": "/wiki/catalog/pg_type/?v=18", "label": "pg_type 系统目录"}, {"url": "/wiki/catalog/pg_cast/?v=18", "label": "pg_cast 系统目录"}, {"url": "/wiki/catalog/pg_operator/?v=18", "label": "pg_operator 系统目录"}, {"url": "/wiki/catalog/pg_opclass/?v=18", "label": "pg_opclass 系统目录"}, {"url": "/wiki/type/arrays/?v=18", "label": "数组"}, {"url": "/wiki/indexam/brin/?v=18", "label": "brin 索引访问方法"}, {"url": "/wiki/indexam/btree/?v=18", "label": "btree 索引访问方法"}, {"url": "/wiki/indexam/hash/?v=18", "label": "hash 索引访问方法"}], "release": {"ref": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "18.6", "major": "18", "channel": "stable", "revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "source_files": {"doc/src/sgml/datatype.sgml": "86328daa77e20d81d222376ec0306d9841a17104e436c08d138eb763aefb3700", "src/include/catalog/pg_am.h": "3426799df799f32163fcc0765f43dbdb5e88e626acf31284fef9fc6014b69d8e", "src/include/catalog/pg_am.dat": "b3cb86b102a42fb0024cbd99779c9897afb40d12a71f5cc5a0e5aee7ff2f9969", "src/include/catalog/pg_cast.h": "de585c7df687d698e7d1d100dce8a794ac9da52414ea48169191019178c8f053", "src/include/catalog/pg_proc.h": "f7d59f07c5b95e2f3c7141762a0f576e8a3af7581ba54c27537f4d500472bea5", "src/include/catalog/pg_type.h": "8fb198749fd82b6c1818a3c18455f226f66116fcfeb3d4959c65ce3fda22802e", "src/include/catalog/pg_range.h": "45546d952b5181f989bd9234721897fc2b37005c8e49ce2ddc156f26974c3ca4", "src/include/catalog/pg_cast.dat": "97911281ca2c81917394ccb2ec13367e37c6801fd461d5e1a3d2f28b911b46b2", "src/include/catalog/pg_proc.dat": "1f934ce80d460159dda137714374a35f9896315ea2476709cbb4da13b38ef95a", "src/include/catalog/pg_type.dat": "5f5887b75677cba2d4a1a0cfeb355df5ed91f85d385fac88bd8d7c605b3578f9", "src/include/catalog/pg_opclass.h": "9c218537806c8ef0398302faaca7f91315dfc1198c48706cebffb479b68defaf", "src/include/catalog/pg_range.dat": "5c2271f8e89e9378d1887204e5785060b77405b5f0ff3e6c719250c9c1dcfcc4", "src/include/catalog/pg_operator.h": "621b18cfffe102413d79b746ce7a10f77fc60fdd097bac34c22b31070d3ee3c4", "src/include/catalog/pg_opfamily.h": "e1f5fc8aebd3042df847455bf66bf755f768c2aa8a9b03d22f7ec8563eba59c0", "src/include/catalog/pg_opclass.dat": "4ee7d3619a6aa106e1c0db55de903931c7d11b1c60ba053a022519c55f8ee668", "src/include/catalog/pg_operator.dat": "5d35b9b2ef5f9797cc815263927ef8a12367fedace53e828b4e8b320e2a7f703", "src/include/catalog/pg_opfamily.dat": "3b694879027b858f2ecf1fa1152b7e30c6e15a216ba99c2384291c30e9d52311"}, "manual_sha256": {"arrays.html": "0e1d5c5a7b4a949d4439995f44f74ad4264e050d16eb9ad2a850fbaee04032df", "domains.html": "82d486973ccc35d14276627a67ac76b434452f23f9ed4d8aa3fbb01fdf285fc2", "datatype.html": "e581f67c74e42006289638c8659e9b338adbfd7f068bd8bf2b3be3880fcd2254", "rowtypes.html": "74f99e029c3a9edfd3e18810ba3c8cb66d3aada91eb67b86476560871e6617e9", "rangetypes.html": "e4960abc7ce8e51d794f94f1e57b099d30b7f75dd7f2b23a960eef91f6291c33", "datatype-bit.html": "c49124aad561636c18080b9e09572fde7785a6b9eae86f5a33283f0fd6774c37", "datatype-oid.html": "8b3360302225f08ae72716ce1804596de95b568e5d31f788cb4597427b28cc38", "datatype-xml.html": "061fc2295b7b69be704f0a741b8decd10ad721059f871fb0243c669bb54d7822", "datatype-enum.html": "cab38e53222e30cc94b24de4b33634fd22d7c93f58ebcf35f646c9b8da78fae8", "datatype-json.html": "650162a05b660146b500a205d523374d00aee117a6a6240d30262be51b6e33e5", "datatype-uuid.html": "292b307b3223c6182bdba687e7f69e6dca9038430143ad79d56327f6ed4c3246", "datatype-money.html": "8b29c14b90679683ac5c472b59a0a7e2853f32cc7db43fab417b2697a6879964", "functions-info.html": "78ac80bf81da2e4f4a33f3b850faa86f0f58ec54a083d6c31da557907de0df87", "catalog-pg-type.html": "ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4", "datatype-binary.html": "0c03ec47b76e37888a3da7f5dcfd340128a5d356642a85185cc9ebe17856a904", "datatype-pg-lsn.html": "339172f5107cc7eb7139bec911277647219e92a532cebd0f3da0a5dacf8195af", "datatype-pseudo.html": "c7cf0b8214304bd8702c95f2142671ae5f0d631f83717f9c07d9e1f2579961b4", "datatype-boolean.html": "b633f663e6c8276e7056287640c413aa79dbc15d5353cee0d41653d58d376956", "datatype-numeric.html": "b74619f7ac2f1ca9f85c48073df78c33dd30e464e61baba6008634534edcb500", "sql-createdomain.html": "e94f927196de1b0ea1ce35cd4603c1f6f544439adcc0edf1c4222358e832245b", "datatype-datetime.html": "e366275d8b13845bfa4ef0d68faa093e5f3ecb708a1ec870cbcbf7e425b85699", "datatype-character.html": "c73eebe413ea709a7792e4cfc3cfe9fb68cb496ebe83c3ebaa9d09f8c40d0f73", "datatype-geometric.html": "0eb3053cfe7d6b0a4b5592c5d7af8d97cae527e87f063c5793413bcba5c14cd9", "datatype-net-types.html": "96846e641cc37727ddcd8b8a1aa0dbe33cd9787760a2b4efb0dcb9403d5be63f", "datatype-textsearch.html": "4b15e05be8b49a71b28aea22f2c46d0dbf639a91e7b4fe129a4c737c6daad47c"}, "source_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "sources": [{"url": "https://pg.center/docs/18/datatype-binary.html", "path": "datatype-binary.html", "label": "PostgreSQL 18 English manual", "sha256": "0c03ec47b76e37888a3da7f5dcfd340128a5d356642a85185cc9ebe17856a904", "language": "en", "original_url": "/docs/18/datatype-binary.html"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "Matching PostgreSQL source archive", "sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}], "coverage": "source inventory; exact declared input types for operator classes", "sections": [], "operators": [{"oid": "1955", "descr": "equal", "oprcom": "=(bytea,bytea)", "oprcode": "byteaeq", "oprjoin": "eqjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "=", "oprrest": "eqsel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": "<>(bytea,bytea)", "oprresult": "bool", "oid_symbol": "ByteaEqualOperator", "oprcanhash": "t", "oprcanmerge": "t", "oprnamespace": "pg_catalog"}, {"oid": "1956", "descr": "not equal", "oprcom": "<>(bytea,bytea)", "oprcode": "byteane", "oprjoin": "neqjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "<>", "oprrest": "neqsel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": "=(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}, {"oid": "1957", "descr": "less than", "oprcom": ">(bytea,bytea)", "oprcode": "bytealt", "oprjoin": "scalarltjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "<", "oprrest": "scalarltsel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": ">=(bytea,bytea)", "oprresult": "bool", "oid_symbol": "ByteaLessOperator", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}, {"oid": "1958", "descr": "less than or equal", "oprcom": ">=(bytea,bytea)", "oprcode": "byteale", "oprjoin": "scalarlejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "<=", "oprrest": "scalarlesel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": ">(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}, {"oid": "1959", "descr": "greater than", "oprcom": "<(bytea,bytea)", "oprcode": "byteagt", "oprjoin": "scalargtjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": ">", "oprrest": "scalargtsel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": "<=(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}, {"oid": "1960", "descr": "greater than or equal", "oprcom": "<=(bytea,bytea)", "oprcode": "byteage", "oprjoin": "scalargejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": ">=", "oprrest": "scalargesel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": "<(bytea,bytea)", "oprresult": "bool", "oid_symbol": "ByteaGreaterEqualOperator", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}, {"oid": "2016", "descr": "matches LIKE expression", "oprcom": "0", "oprcode": "bytealike", "oprjoin": "likejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "~~", "oprrest": "likesel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": "!~~(bytea,bytea)", "oprresult": "bool", "oid_symbol": "OID_BYTEA_LIKE_OP", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}, {"oid": "2017", "descr": "does not match LIKE expression", "oprcom": "0", "oprcode": "byteanlike", "oprjoin": "nlikejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "!~~", "oprrest": "nlikesel", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": "~~(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}, {"oid": "2018", "descr": "concatenate", "oprcom": "0", "oprcode": "byteacat", "oprjoin": "-", "oprkind": "b", "oprleft": "bytea", "oprname": "||", "oprrest": "-", "oprowner": "POSTGRES", "oprright": "bytea", "oprnegate": "0", "oprresult": "bytea", "oprcanhash": "f", "oprcanmerge": "f", "oprnamespace": "pg_catalog"}], "signature": "bytea", "description": ["二进制数据（“字节数组”）"], "manual_html": "<div class=\"sect1\" id=\"DATATYPE-BINARY\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h2 class=\"title\" lang=\"zh\">\n<div>\n<div>\n<h2 class=\"title\" style=\"clear: both\">8.4. 二进制数据类型 </h2>\n</div>\n</div>\n</h2>\n</div>\n</div>\n</div>\n<p lang=\"zh\"><code class=\"type\">bytea</code>数据类型允许存储二进制串，参见<a class=\"xref\" href=\"/docs/18/datatype-binary.html#DATATYPE-BINARY-TABLE\" title=\"表 8.6. 二进制数据类型\">表 8.6</a>。</p>\n<div class=\"table\" id=\"DATATYPE-BINARY-TABLE\">\n<p class=\"title\" lang=\"zh\"><strong>表 8.6. 二进制数据类型</strong></p>\n<div class=\"table-contents\">\n<table class=\"table\">\n<thead>\n<tr>\n<th lang=\"zh\">名字</th>\n<th lang=\"zh\">存储大小</th>\n<th lang=\"zh\">说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"type\">bytea</code></td>\n<td lang=\"zh\">1 或 4 字节，加上实际二进制串</td>\n<td lang=\"zh\">变长二进制串</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div><br class=\"table-break\"/>\n<p lang=\"zh\">二进制串是八位组（或字节）的序列。二进制串与字符串有两点区别。首先，二进制串明确允许存储值为零的字节以及其他<span class=\"quote\">“<span class=\"quote\">不可打印</span>”</span>的字节（通常指十进制范围 32 到 126 之外的字节）。而字符串不允许零字节，也不允许那些按数据库所选字符集编码看属于非法的其他字节值或字节序列。其次，对二进制串的操作处理的是实际字节，而字符串的处理则取决于区域设置。简单地说，二进制串适合存储程序员视为<span class=\"quote\">“<span class=\"quote\">裸字节</span>”</span>的数据，而字符串适合存储文本。</p>\n<p lang=\"zh\">bytea 支持两种输入／输出格式：hex 格式和 PostgreSQL 历史上使用的 escape 格式。输入始终接受这两种格式；输出格式由 bytea_output 配置参数决定，默认为 hex。（hex 格式从 PostgreSQL 9.0 开始引入，更早版本和部分工具无法识别。）</p>\n<p lang=\"zh\"><acronym class=\"acronym\">SQL</acronym>标准定义了一种不同的二进制串类型，叫做<code class=\"type\">BLOB</code>或者<code class=\"type\">BINARY LARGE OBJECT</code>。其输入格式和<code class=\"type\">bytea</code>不同，但是提供的函数和操作符大多一样。</p>\n<div class=\"sect2\" id=\"DATATYPE-BINARY-BYTEA-HEX-FORMAT\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/18/datatype-binary.html#DATATYPE-BINARY-BYTEA-HEX-FORMAT\">8.4.1. <code class=\"type\">bytea</code>的十六进制格式</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\">hex 格式将每个二进制字节编码为 2 个十六进制数字，高四位在前。整个字符串以 \\x 开头，以区别于 escape 格式。在某些上下文中，开头的反斜杠需要重复一次进行转义，见第 4.1.2.1 节。输入时十六进制数字可以大写或小写，数字对之间允许空白，但每对数字内部以及开头的 \\x 内部不允许空白。hex 格式兼容多种外部应用和协议，通常也比 escape 格式转换更快，因此推荐使用。</p>\n<p lang=\"zh\">示例：</p>\n<pre class=\"programlisting\">SET bytea_output = 'hex';\n\nSELECT '\\xDEADBEEF'::bytea;\n   bytea\n------------\n \\xdeadbeef\n</pre>\n</div>\n<div class=\"sect2\" id=\"DATATYPE-BINARY-BYTEA-ESCAPE-FORMAT\">\n<div class=\"titlepage\">\n<div>\n<div>\n<h3 class=\"title\" lang=\"zh\"><span class=\"sect2\"><a href=\"/docs/18/datatype-binary.html#DATATYPE-BINARY-BYTEA-ESCAPE-FORMAT\">8.4.2. <code class=\"type\">bytea</code>的转义格式</a></span></h3>\n</div>\n</div>\n</div>\n<p lang=\"zh\"><span class=\"quote\">“<span class=\"quote\">转义</span>”</span>格式是 <code class=\"type\">bytea</code> 类型在 <span class=\"productname\">PostgreSQL</span> 中的传统格式。它采用把二进制串表示为 ASCII 字符序列的方式，同时把那些不能表示为 ASCII 字符的字节转换为特殊的转义序列。如果从应用角度看，把字节当作字符表示是合理的，那么这种表示法会比较方便。但在实际中它往往让人困惑，因为它模糊了二进制串和字符串之间的区别，而且所选用的转义机制也比较笨拙。因此，对大多数新应用来说，最好避免使用这种格式。</p>\n<p lang=\"zh\">在转义格式中输入 <code class=\"type\">bytea</code> 值时，某些字节值<span class=\"emphasis\"><em>必须</em></span>转义，而所有字节值都<span class=\"emphasis\"><em>可以</em></span>转义。通常，转义一个字节的方法是把它写成三位八进制值，并在前面加一个反斜线。反斜线本身（十进制字节值 92）也可以写成双反斜线。<a class=\"xref\" href=\"/docs/18/datatype-binary.html#DATATYPE-BINARY-SQLESC\" title=\"表 8.7. bytea字面量中需要转义的字节\">表 8.7</a>展示了必须转义的字符，并给出了可用的替代转义序列。</p>\n<div class=\"table\" id=\"DATATYPE-BINARY-SQLESC\">\n<p class=\"title\" lang=\"zh\"><strong>表 8.7. <code class=\"type\">bytea</code>字面量中需要转义的字节</strong></p>\n<div class=\"table-contents\">\n<table class=\"table\">\n<thead>\n<tr>\n<th lang=\"zh\">十进制字节值</th>\n<th lang=\"zh\">说明</th>\n<th lang=\"zh\">转义输入表示</th>\n<th lang=\"zh\">示例</th>\n<th lang=\"zh\">十六进制表示</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td lang=\"zh\">零值字节</td>\n<td><code class=\"literal\">'\\000'</code></td>\n<td><code class=\"literal\">'\\000'::bytea</code></td>\n<td><code class=\"literal\">\\x00</code></td>\n</tr>\n<tr>\n<td>39</td>\n<td lang=\"zh\">单引号</td>\n<td lang=\"zh\"><code class=\"literal\">''''</code>或<code class=\"literal\">'\\047'</code></td>\n<td><code class=\"literal\">''''::bytea</code></td>\n<td><code class=\"literal\">\\x27</code></td>\n</tr>\n<tr>\n<td>92</td>\n<td lang=\"zh\">反斜线</td>\n<td lang=\"zh\"><code class=\"literal\">'\\\\'</code>或<code class=\"literal\">'\\134'</code></td>\n<td><code class=\"literal\">'\\\\'::bytea</code></td>\n<td><code class=\"literal\">\\x5c</code></td>\n</tr>\n<tr>\n<td lang=\"zh\">0 至 31 和 127 至 255</td>\n<td lang=\"zh\"><span class=\"quote\">“<span class=\"quote\">不可打印的</span>”</span>字节</td>\n<td lang=\"zh\"><code class=\"literal\">'\\<em class=\"replaceable\"><code>xxx'</code></em></code>（八进制值）</td>\n<td><code class=\"literal\">'\\001'::bytea</code></td>\n<td><code class=\"literal\">\\x01</code></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div><br class=\"table-break\"/>\n<p lang=\"zh\">是否必须转义这些<span class=\"emphasis\"><em>不可打印</em></span>字节，会因区域设置不同而有所差异。在某些情况下，你可以不转义它们。</p>\n<p lang=\"zh\">如<a class=\"xref\" href=\"/docs/18/datatype-binary.html#DATATYPE-BINARY-SQLESC\" title=\"表 8.7. bytea字面量中需要转义的字节\">表 8.7</a>所示，单引号必须双写，这是 SQL 命令中所有字符串常量都遵循的规则。通用的字符串常量解析器会去掉最外层单引号，并把任意成对的单引号缩减为一个数据字符。因此，<code class=\"type\">bytea</code> 输入函数实际只会看到一个单引号，并将其视为普通数据字符。不过，<code class=\"type\">bytea</code> 输入函数会把反斜线视为特殊字符，而<a class=\"xref\" href=\"/docs/18/datatype-binary.html#DATATYPE-BINARY-SQLESC\" title=\"表 8.7. bytea字面量中需要转义的字节\">表 8.7</a>中展示的其他行为也是由这个函数实现的。</p>\n<p lang=\"zh\">在某些上下文中，反斜线必须比上面显示的再多写一倍，因为通用的字符串常量解析器也会把成对反斜线缩减为一个数据字符；参见<a class=\"xref\" href=\"/docs/18/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS\" title=\"4.1.2.1. 字符串常量\">第 4.1.2.1 节</a>。</p>\n<p lang=\"zh\">bytea 的八位组默认以十六进制格式输出。如果将 bytea_output 改为 escape，“不可打印”的八位组会转换为等价的三位八进制值，并在前面加一个反斜杠。大多数“可打印”的八位组则使用客户端字符集中的标准表示输出，例如：</p>\n<pre class=\"programlisting\">SET bytea_output = 'escape';\n\nSELECT 'abc \\153\\154\\155 \\052\\251\\124'::bytea;\n     bytea\n----------------\n abc klm *\\251T\n</pre>\n<p lang=\"zh\">十进制值 92（反斜线）的字节在输出中会被双写。详情见<a class=\"xref\" href=\"/docs/18/datatype-binary.html#DATATYPE-BINARY-RESESC\" title=\"表 8.8. bytea输出转义字节\">表 8.8</a>。</p>\n<div class=\"table\" id=\"DATATYPE-BINARY-RESESC\">\n<p class=\"title\" lang=\"zh\"><strong>表 8.8. <code class=\"type\">bytea</code>输出转义字节</strong></p>\n<div class=\"table-contents\">\n<table class=\"table\">\n<thead>\n<tr>\n<th lang=\"zh\">十进制字节值</th>\n<th lang=\"zh\">说明</th>\n<th lang=\"zh\">转义的输出表示</th>\n<th lang=\"zh\">示例</th>\n<th lang=\"zh\">输出结果</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>92</td>\n<td lang=\"zh\">反斜线</td>\n<td><code class=\"literal\">\\\\</code></td>\n<td><code class=\"literal\">'\\134'::bytea</code></td>\n<td><code class=\"literal\">\\\\</code></td>\n</tr>\n<tr>\n<td lang=\"zh\">0 至 31 和 127 至 255</td>\n<td lang=\"zh\"><span class=\"quote\">“<span class=\"quote\">不可打印的</span>”</span>字节</td>\n<td lang=\"zh\"><code class=\"literal\">\\<em class=\"replaceable\"><code>xxx</code></em></code>（八进制值）</td>\n<td><code class=\"literal\">'\\001'::bytea</code></td>\n<td><code class=\"literal\">\\001</code></td>\n</tr>\n<tr>\n<td lang=\"zh\">32 至 126</td>\n<td lang=\"zh\"><span class=\"quote\">“<span class=\"quote\">可打印的</span>”</span>字节</td>\n<td lang=\"zh\">客户端字符集表示</td>\n<td><code class=\"literal\">'\\176'::bytea</code></td>\n<td><code class=\"literal\">~</code></td>\n</tr>\n</tbody>\n</table>\n</div>\n</div><br class=\"table-break\"/>\n<p lang=\"zh\">取决于你所使用的 <span class=\"productname\">PostgreSQL</span> 前端，在转义和反转义 <code class=\"type\">bytea</code> 串时可能还需要做额外工作。例如，如果你的接口会自动转换换行和回车，那么你可能还需要对它们进行转义。</p>\n</div>\n</div>", "manual_path": "datatype-binary.html", "localization": {"status": "complete", "sources": [{"url": "/docs/18/datatype-binary.html", "method": "same-major semantic node", "sha256": "c920ef4acee3e68440b2da39e5417247a1e7d0251c0bb2bf6c929e0a1e5749fd", "language": "zh", "matched_nodes": ["#DATATYPE-BINARY/div[0]", "#DATATYPE-BINARY/div[10]/p[2]", "#DATATYPE-BINARY/div[11]/div[11]/div[1]/table[0]/tbody[2]/tr[1]/td[2]", "#DATATYPE-BINARY/div[11]/div[11]/div[1]/table[0]/tbody[2]/tr[2]/td[1]", "#DATATYPE-BINARY/div[11]/div[11]/div[1]/table[0]/tbody[2]/tr[2]/td[2]", "#DATATYPE-BINARY/div[11]/div[11]/div[1]/table[0]/thead[1]/tr[0]/th[2]", "#DATATYPE-BINARY/div[11]/div[11]/div[1]/table[0]/thead[1]/tr[0]/th[4]", "#DATATYPE-BINARY/div[11]/div[11]/p[0]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/tbody[2]/tr[0]/td[1]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/tbody[2]/tr[1]/td[1]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/tbody[2]/tr[1]/td[2]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/tbody[2]/tr[2]/td[1]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/tbody[2]/tr[2]/td[2]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/tbody[2]/tr[3]/td[1]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/tbody[2]/tr[3]/td[2]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/thead[1]/tr[0]/th[0]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/thead[1]/tr[0]/th[2]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/thead[1]/tr[0]/th[3]", "#DATATYPE-BINARY/div[11]/div[3]/div[1]/table[0]/thead[1]/tr[0]/th[4]", "#DATATYPE-BINARY/div[11]/div[3]/p[0]", "#DATATYPE-BINARY/div[11]/p[10]", "#DATATYPE-BINARY/div[11]/p[13]", "#DATATYPE-BINARY/div[11]/p[1]", "#DATATYPE-BINARY/div[11]/p[2]", "#DATATYPE-BINARY/div[11]/p[5]", "#DATATYPE-BINARY/div[11]/p[6]", "#DATATYPE-BINARY/div[11]/p[7]", "#DATATYPE-BINARY/div[1]/dl[0]/dt[0]", "#DATATYPE-BINARY/div[1]/dl[0]/dt[1]", "#DATATYPE-BINARY/div[5]/div[1]/table[0]/tbody[2]/tr[0]/td[2]", "#DATATYPE-BINARY/div[5]/div[1]/table[0]/thead[1]/tr[0]/th[0]", "#DATATYPE-BINARY/div[5]/p[0]", "#DATATYPE-BINARY/p[4]", "#DATATYPE-BINARY/p[7]", "#DATATYPE-BINARY/p[9]"]}, {"url": "/docs/18/functions-matching.html", "method": "same-major semantic node", "sha256": "704120d783880b39b956c073d1a82ba1f40b35068b4d3b9a195f543b86c3a22a", "language": "zh", "matched_nodes": ["#FUNCTIONS-MATCHING/div[9]/div[51]/p[2]/em[2]"]}], "language": "zh", "original_text": {"/versions/18/description/0": "binary data ( “ byte array ” )", "/versions/18/facts/0/label": "Catalog name", "/versions/18/facts/1/label": "Type OID", "/versions/18/facts/2/label": "Type kind", "/versions/18/facts/2/value": "Base type", "/versions/18/facts/3/label": "Declared length", "/versions/18/facts/3/value": "Variable length (varlena)", "/versions/18/facts/4/label": "Storage strategy", "/versions/18/facts/4/value": "extended", "/versions/18/facts/5/label": "Input function", "/versions/18/facts/6/label": "Output function", "/versions/18/facts/7/label": "Documented declaration", "/versions/18/facts/8/label": "Storage Size", "/versions/18/facts/8/value": "1 or 4 bytes plus the actual binary string", "/versions/18/facts/9/label": "Manual description", "/versions/18/facts/9/value": "variable-length binary string", "/versions/18/related/0/label": "pg_type catalog", "/versions/18/related/1/label": "pg_cast catalog", "/versions/18/related/2/label": "pg_operator catalog", "/versions/18/related/3/label": "pg_opclass catalog", "/versions/18/related/4/label": "Arrays", "/versions/18/related/5/label": "brin index access method", "/versions/18/related/6/label": "btree index access method", "/versions/18/related/7/label": "hash index access method"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "14d7ddb09be7db83f3ac1306bc842ff39f74f432071369b07620f1cda81ac3b1"}, "comparison_data": {"casts": [{"castfunc": "bytea(int2)", "castmethod": "f", "castsource": "int2", "casttarget": "bytea", "castcontext": "e"}, {"castfunc": "bytea(int4)", "castmethod": "f", "castsource": "int4", "casttarget": "bytea", "castcontext": "e"}, {"castfunc": "bytea(int8)", "castmethod": "f", "castsource": "int8", "casttarget": "bytea", "castcontext": "e"}, {"castfunc": "int2(bytea)", "castmethod": "f", "castsource": "bytea", "casttarget": "int2", "castcontext": "e"}, {"castfunc": "int4(bytea)", "castmethod": "f", "castsource": "bytea", "casttarget": "int4", "castcontext": "e"}, {"castfunc": "int8(bytea)", "castmethod": "f", "castsource": "bytea", "casttarget": "int8", "castcontext": "e"}, {"castfunc": "0", "castmethod": "b", "castsource": "pg_dependencies", "casttarget": "bytea", "castcontext": "i"}, {"castfunc": "0", "castmethod": "b", "castsource": "pg_mcv_list", "casttarget": "bytea", "castcontext": "i"}, {"castfunc": "0", "castmethod": "b", "castsource": "pg_ndistinct", "casttarget": "bytea", "castcontext": "i"}], "facts": [{"label": "Catalog name", "value": "pg_catalog.bytea"}, {"label": "Declared length", "value": "Variable length (varlena)"}, {"label": "Documented declaration", "value": "bytea"}, {"label": "Input function", "value": "byteain"}, {"label": "Output function", "value": "byteaout"}, {"label": "Storage Size", "value": "1 or 4 bytes plus the actual binary string"}, {"label": "Storage strategy", "value": "extended"}, {"label": "Type OID", "value": "17"}, {"label": "Type kind", "value": "Base type"}], "ranges": [], "aliases": [], "catalog": {"typacl": "_null_", "typlen": "-1", "typelem": "0", "typname": "bytea", "typsend": "byteasend", "typtype": "b", "typalign": "i", "typarray": "_bytea", "typbyval": "f", "typdelim": ",", "typinput": "byteain", "typmodin": "-", "typndims": "0", "typrelid": "0", "typmodout": "-", "typoutput": "byteaout", "typtypmod": "-1", "typanalyze": "-", "typdefault": "_null_", "typnotnull": "f", "typreceive": "bytearecv", "typstorage": "x", "typbasetype": "0", "typcategory": "U", "typcollation": "0", "typisdefined": "t", "typsubscript": "-", "typdefaultbin": "_null_", "typispreferred": "f", "array_type_name": "_bytea"}, "operators": [{"oprcom": "0", "oprcode": "byteacat", "oprjoin": "-", "oprkind": "b", "oprleft": "bytea", "oprname": "||", "oprrest": "-", "oprright": "bytea", "oprnegate": "0", "oprresult": "bytea", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": "<=(bytea,bytea)", "oprcode": "byteage", "oprjoin": "scalargejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": ">=", "oprrest": "scalargesel", "oprright": "bytea", "oprnegate": "<(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": "<(bytea,bytea)", "oprcode": "byteagt", "oprjoin": "scalargtjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": ">", "oprrest": "scalargtsel", "oprright": "bytea", "oprnegate": "<=(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": ">=(bytea,bytea)", "oprcode": "byteale", "oprjoin": "scalarlejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "<=", "oprrest": "scalarlesel", "oprright": "bytea", "oprnegate": ">(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": "0", "oprcode": "bytealike", "oprjoin": "likejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "~~", "oprrest": "likesel", "oprright": "bytea", "oprnegate": "!~~(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": ">(bytea,bytea)", "oprcode": "bytealt", "oprjoin": "scalarltjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "<", "oprrest": "scalarltsel", "oprright": "bytea", "oprnegate": ">=(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": "<>(bytea,bytea)", "oprcode": "byteane", "oprjoin": "neqjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "<>", "oprrest": "neqsel", "oprright": "bytea", "oprnegate": "=(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": "0", "oprcode": "byteanlike", "oprjoin": "nlikejoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "!~~", "oprrest": "nlikesel", "oprright": "bytea", "oprnegate": "~~(bytea,bytea)", "oprresult": "bool", "oprcanhash": "f", "oprcanmerge": "f"}, {"oprcom": "=(bytea,bytea)", "oprcode": "byteaeq", "oprjoin": "eqjoinsel", "oprkind": "b", "oprleft": "bytea", "oprname": "=", "oprrest": "eqsel", "oprright": "bytea", "oprnegate": "<>(bytea,bytea)", "oprresult": "bool", "oprcanhash": "t", "oprcanmerge": "t"}], "operator_classes": [{"opcname": "bytea_bloom_ops", "opcfamily": "brin/bytea_bloom_ops", "opcintype": "bytea", "opcmethod": "brin", "opcdefault": "f", "opckeytype": "bytea"}, {"opcname": "bytea_minmax_ops", "opcfamily": "brin/bytea_minmax_ops", "opcintype": "bytea", "opcmethod": "brin", "opcdefault": "t", "opckeytype": "bytea"}, {"opcname": "bytea_ops", "opcfamily": "btree/bytea_ops", "opcintype": "bytea", "opcmethod": "btree", "opcdefault": "t", "opckeytype": "0"}, {"opcname": "bytea_ops", "opcfamily": "hash/bytea_ops", "opcintype": "bytea", "opcmethod": "hash", "opcdefault": "t", "opckeytype": "0"}]}, "comparison_hash": "57a42e92d9e379de8dd1fabd68c620882852d79d2ab96850b2e678543bfdced1", "manual_language": "zh", "operator_classes": [{"opcname": "bytea_ops", "opcowner": "POSTGRES", "opcfamily": "btree/bytea_ops", "opcintype": "bytea", "opcmethod": "btree", "opcdefault": "t", "opckeytype": "0", "opcnamespace": "pg_catalog"}, {"opcname": "bytea_ops", "opcowner": "POSTGRES", "opcfamily": "hash/bytea_ops", "opcintype": "bytea", "opcmethod": "hash", "opcdefault": "t", "opckeytype": "0", "opcnamespace": "pg_catalog"}, {"opcname": "bytea_minmax_ops", "opcowner": "POSTGRES", "opcfamily": "brin/bytea_minmax_ops", "opcintype": "bytea", "opcmethod": "brin", "opcdefault": "t", "opckeytype": "bytea", "opcnamespace": "pg_catalog"}, {"opcname": "bytea_bloom_ops", "opcowner": "POSTGRES", "opcfamily": "brin/bytea_bloom_ops", "opcintype": "bytea", "opcmethod": "brin", "opcdefault": "f", "opckeytype": "bytea", "opcnamespace": "pg_catalog"}], "manual_documentation": "dedicated family chapter"}, "from": "17", "comparison": {"available": true, "changes": [{"label": "类型转换", "before": "[{\"castcontext\": \"i\", \"castfunc\": \"0\", \"castmethod\": \"b\", \"castsource\": \"pg_dependencies\", \"casttarget\": \"bytea\"}, {\"castcontext\": \"i\", \"castfunc\": \"0\", \"castmethod\": \"b\", \"castsource\": \"pg_mcv_list\", \"casttarget\": \"bytea\"}, {\"castcontext\": \"i\", \"castfunc\": \"0\", \"castmethod\": \"b\", \"castsource\": \"pg_ndistinct\", \"casttarget\": \"bytea\"}]", "after": "[{\"castcontext\": \"e\", \"castfunc\": \"bytea(int2)\", \"castmethod\": \"f\", \"castsource\": \"int2\", \"casttarget\": \"bytea\"}, {\"castcontext\": \"e\", \"castfunc\": \"bytea(int4)\", \"castmethod\": \"f\", \"castsource\": \"int4\", \"casttarget\": \"bytea\"}, {\"castcontext\": \"e\", \"castfunc\": \"bytea(int8)\", \"castmethod\": \"f\", \"castsource\": \"int8\", \"casttarget\": \"bytea\"}, {\"castcontext\": \"e\", \"castfunc\": \"int2(bytea)\", \"castmethod\": \"f\", \"castsource\": \"bytea\", \"casttarget\": \"int2\"}, {\"castcontext\": \"e\", \"castfunc\": \"int4(bytea)\", \"castmethod\": \"f\", \"castsource\": \"bytea\", \"casttarget\": \"int4\"}, {\"castcontext\": \"e\", \"castfunc\": \"int8(bytea)\", \"castmethod\": \"f\", \"castsource\": \"bytea\", \"casttarget\": \"int8\"}, {\"castcontext\": \"i\", \"castfunc\": \"0\", \"castmethod\": \"b\", \"castsource\": \"pg_dependencies\", \"casttarget\": \"bytea\"}, {\"castcontext\": \"i\", \"castfunc\": \"0\", \"castmethod\": \"b\", \"castsource\": \"pg_mcv_list\", \"casttarget\": \"bytea\"}, {\"castcontext\": \"i\", \"castfunc\": \"0\", \"castmethod\": \"b\", \"castsource\": \"pg_ndistinct\", \"casttarget\": \"bytea\"}]"}], "prose_changed": true}}