相关文章推荐
豁达的圣诞树  ·  PostgreSQL ...·  4 月前    · 
奔跑的创口贴  ·  无需添加引号使PostgreSQL标识符区分 ...·  3 月前    · 
不拘小节的毛衣  ·  PostgreSQL操作-psql基本命令 ...·  3 月前    · 
气势凌人的洋葱  ·  记录一下,学习github上的jackfru ...·  1 年前    · 
还单身的黑框眼镜  ·  android开发的Matrix的mapPo ...·  2 年前    · 
个性的电影票  ·  shell脚本实现轮询查看进程是否结束_sh ...·  3 年前    · 
知识渊博的豆芽  ·  Oracle2PolarDB:Polardb ...·  3 年前    · 
稳重的红豆  ·  Windows Azure ...·  3 年前    · 
Code  ›  PostgreSQL 13 第 8 章 数据类型 8.4. 二进制数据类型 - 墨天轮
大数据 二进制 十六进制 postgresql
https://www.modb.pro/db/90928
瘦瘦的橙子
3 年前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 工具
    • SQLRUN
      在线数据库即时SQL运行平台
    • 数据库在线实训平台
      实操环境、开箱即用、一键连接
    • Oracle巡检
      简单两步,查看报告分析
    • AWR分析
      上传AWR报告,查看分析结果
    • SQL格式化
      快速格式化绝大多数SQL语句
    • SQL审核
      审核编写规范,提升执行效率
    • PLSQL解密
      解密超4000字符的PL/SQL语句
    • OraC函数
      查询Oracle C 函数的详细描述
    • Bethune X
      数据库智能监控巡检平台,90天试用
  • 暂无图片
    • 数据库
    • 云计算
    • 数据产品
    • 中间件
    • 操作系统
    • 芯片
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 云市场
    • 我的订单
    暂无图片
    觉得内容不错?
    一键收藏 方便随时查看
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    暂无图片
    采集到收藏夹
    首页 / PostgreSQL 13 第 8 章 数据类型 8.4. 二进制数据类型

    PostgreSQL 13 第 8 章 数据类型 8.4. 二进制数据类型

    PostgreSQL全球开发组 2021-07-15
    836

    8.4. 二进制数据类型

    8.4.1. bytea 的十六进制格式
    8.4.2. bytea 的转义格式

    bytea 数据类型允许存储二进制串,参见 表 8.6 。

    表 8.6. 二进制数据类型

    名字 存储尺寸 描述
    bytea 1或4字节外加真正的二进制串 变长二进制串

    二进制串是一个八位位组(或字节)的序列。 二进制串和字符串的区别有两个: 首先,二进制串明确允许存储零值的字节以及其它 “ 不可打印的 ” 字节(通常是位于十进制范围32到126之外的字节)。 字符串不允许零字节,并且也不允许那些对于数据库的选定字符集编码是非法的任何其它字节值或者字节值序列。 第二,对二进制串的操作会处理实际上的字节,而字符串的处理和取决于区域设置。 简单说,二进制字串适用于存储那些程序员认为是 “ 裸字节 ” 的数据,而字符串适合存储文本。 bytea 类型支持两种用于输入和输出的格式: “ 十六进制 ” 格式和 PostgreSQL 的历史的 “ 转义 ” 格式。在输入时这两种格式总是会被接受。输出格式则取决于配置参数 bytea_output ,其默认值为十六进制(注意十六进制格式是在 PostgreSQL 9.0中被引入的,早期的版本和某些工具无法理解它)。 SQL 标准定义了一种不同的二进制串类型, 叫做 BLOB 或者 BINARY LARGE OBJECT 。其输入格式和 bytea 不同,但是提供的函数和操作符大多一样。

    8.4.1. bytea 的十六进制格式

    “ 十六进制 ” 格式将二进制数据编码为每个字节2个十六进制位,最高有效位在前。整个串以序列 \x 开头(用以和转义格式区分)。在某些情景中,开头的反斜线可能需要通过双写来转义,详见(see 第 4.1.2.1 节 )。 作为输入,十六进制位可以是大写也可以是小写,在位对之间可以有空白(但是在位对内部以及开头的 \x 序列中不能有空白)。十六进制格式和很多外部应用及协议相兼容,并且其转换速度要比转义格式更快,因此人们更愿意用它。 SELECT '\xDEADBEEF';

    8.4.2. bytea 的转义格式

    “ 转义 ” 格式是 bytea 类型的传统 PostgreSQL 格式。它采用将二进制串表示成ASCII字符序列的方法,而将那些无法用ASCII字符表示的字节转换成特殊的转义语句。从应用的角度来看,如果将字节表示为字符有意义,那么这种表示将很方便。但是在实际中,这常常是令人困扰的,因为它使二进制串和字符串之间的区别变得模糊,并且这种特别的转义机制也有点难于处理。因此这种格式可能会在大部分新应用中避免使用。 在转义模式下输入 bytea 值时,某些值的字节 必须 被转义,而所有的字节值都 可以 被转义。通常,要转义一个字节,需要把它转换成与它的三位八进制值, 并且前导一个反斜线。反斜线本身(十进制字节值92)也可以用双写的反斜线表示。 表 8.7 显示了必须被转义的字符,并给出了可以使用的替代转义序列。

    表 8.7. bytea 文字转义字节

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

    转义 “ 不可打印的 ” 字节的要求取决于区域设置。在某些实例中,你可以不理睬它们,让它们保持未转义的状态。 如 表 8.7 中所示,要求单引号必须写两次的原因对任何SQL命令中的字符串常量都是一样的。 文字解析器消耗最外层的单引号,并缩减成对的单引号为一个普通数据字符。 bytea 输入函数看到的只是一个单引号,它将其视为普通数据字符。 但是, bytea 输入函数将反斜杠视为特殊字符, 表 8.7 中显示的其他行为由该函数实现。 在某些情况下,反斜杠必须加倍,如上所示,因为通用的字符串文字解析器也会 将一对反斜杠减少为一个数据字符;请参阅 第 4.1.2.1 节 。 Bytea 字节默认被输出为 hex 格式。如果你把 bytea_output 改为 escape , “ 不可打印的 ” 字节会被转换成与之等效的三位八进制值并且前置一个反斜线。大部分 “ 可打印的 ” 字节被输出为它们在客户端字符集中的标准表示形式,例如: SET bytea_output = 'escape'; SELECT 'abc \153\154\155 \052\251\124'::bytea; bytea ---------------- abc klm *\251T

     
    推荐文章
    豁达的圣诞树  ·  PostgreSQL 13.3中如何将多组JSON键值对数组作为查询参数传入?
    4 月前
    奔跑的创口贴  ·  无需添加引号使PostgreSQL标识符区分大小写:MySQL迁移至PostgreSQL的SQL查询适配求助
    3 月前
    不拘小节的毛衣  ·  PostgreSQL操作-psql基本命令 - 沐春风-燕南飞
    3 月前
    气势凌人的洋葱  ·  记录一下,学习github上的jackfrued / Python-100-Days的过程_github jackfrued-CSDN博客
    1 年前
    还单身的黑框眼镜  ·  android开发的Matrix的mapPoints方法是如何计算的呢?-CSDN博客
    2 年前
    个性的电影票  ·  shell脚本实现轮询查看进程是否结束_shell脚本轮训查询结果_DDDDemo的博客-CSDN博客
    3 年前
    知识渊博的豆芽  ·  Oracle2PolarDB:Polardb O引擎兼容性之数据字典值大小写-阿里云帮助中心
    3 年前
    稳重的红豆  ·  Windows Azure 内幕-Windows Azure 中 Node.js 的真实场景 | Microsoft Learn
    3 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号