bytea

一种可以存储二进制字符串的数据类型

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
    • 增加了对 minmax 聚合函数的支持(提交 2d24fd94
    • 增加了对转换为 integer 类型和从 integer 类型转换的支持(提交 6da469ba
  • PostgreSQL 9.0
    • 增加了十六进制字符串输入和输出(提交 a2a8c7a6

分类

bytea, 数据类型

另请参阅

bytea_output

反馈

提交关于“bytea”的任何评论、建议或更正,请点击 这里