bytea 是一种数据类型,它可以存储任意的原始二进制字符串,不受数据库字符编码的影响,并且可以包含空字节和其他“不可打印”字符。
bytea 存在于所有 PostgreSQL 版本中。
用法
bytea 类型支持两种外部格式的输入和输出:传统的“escape”格式,以及在 PostgreSQL 9.0 中引入的较新的“hex”格式。
“hex”格式比“escape”格式更容易处理,但并非所有客户端应用程序都支持。在此格式中,二进制数据被编码为每个字节 2 个十六进制数字,先输出最高有效半字节;整个字符串前面加上 \x 序列。十六进制数字可以是大小写字母;空格被忽略。
postgres=# CREATE TABLE bytea_test (data BYTEA);
CREATE TABLE
postgres=# INSERT INTO bytea_test VALUES(E'\\xDEADBEEF 005c 313233');
INSERT 0 1
postgres=# SELECT * FROM bytea_test ;
data
---------------------------
\xdeadbeef005c313233
(1 row)
传统的“escape”格式将二进制数据表示为一系列 ASCII 字符,其中“不可打印”字符被转义为三位八进制值。这种格式有点麻烦;上面示例中使用的值需要这样输入:
postgres=# INSERT INTO bytea_test VALUES('\336\255\276\357\000\\123');
bytea 数据可以用任一格式输入;输出默认为“hex”,并且受 GUC 选项 bytea_output 控制。
postgres=# SET bytea_output TO 'escape';
SET
postgres=# SELECT * FROM bytea_test ;
data
---------------------------
\336\255\276\357\000\\123
(1 row)
变更历史
- PostgreSQL 18
- PostgreSQL 9.0
- 增加了十六进制字符串输入和输出(提交 a2a8c7a6)
参考资料
- PostgresSQL文档: 二进制数据类型
