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 9.0
- 添加了十六进制字符串输入和输出 (提交a2a8c7a6)
参考文献
- PostgreSQL 文档: 二进制数据类型