重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 251|回复: 0
打印 上一主题 下一主题

[日志类] BLOB类型列显示与录入不一致问题

[复制链接]
跳转到指定楼层
楼主
发表于 2025-12-7 20:11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
BLOB类型录入与显示结果不一致,模拟过程如下:

select pw_version();
                                 pw_version                                 
-----------------------------------------------------------------------------
(PanWeiDB_V2.0-S3.1.1_B01) compiled at 2025-04-09 17:01:35 commit d653354  +
  product name:PanWeiDB                                                     +
  version:V2.0-S3.1.1_B01                                                   +
  commit:d653354                                                            +
  openGauss version:5.0.0                                                   +
  host:x86_64-pc-linux-gnu
(1 row)

DROP TABLE IF EXISTS blob_test;
CREATE TABLE blob_test (c61  BLOB);

mysql=> INSERT INTO blob_test (c61) VALUES('0102030405');
INSERT 0 1
mysql=> SELECT * FROM blob_test;
          c61           
------------------------
\x30313032303330343035
(1 row)

分析
经与研发沟通,该问题出现在mysql模式下,设置 “b_compatibility_mode = on” 时

b_compatibility_mode
----------------------
on
(1 row)
这时显示结果受参数 bytea_output 影响:

bytea_output
参数说明:设置bytea 类型值的输出格式。
该参数属于USERSET 类型参数,请参考:配置运行参数->重设参数章节中表
2 对应设置方法进行设置。
取值范围:枚举类型
hex:将二进制数据编码为每字节2 位十六进制数字。
escape:传统化的PostgreSQL 格式。采用以ASCII 字符序列表示二进
制串的方法,同时将那些无法表示成ASCII 字符的二进制串转换成特殊的
转义序列。
默认值:hex
默认值为hex,把显示结果都转为了HEX显示。 如果想与原值一样显示,可设为 escape。

mysql=> set bytea_output = escape;
SET
mysql=>
mysql=> SELECT * FROM blob_test;
    c61     
------------
0102030405
(1 row)

结论
mysql模式下,设置 “b_compatibility_mode = on” 后,如果想BLOB类型显示与录入一致,需要设置 bytea_output = escape 。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-18 02:59 , Processed in 0.216273 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表