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

标题: BLOB类型列显示与录入不一致问题 [打印本页]

作者: mahan    时间: 2025-12-7 20:11
标题: BLOB类型列显示与录入不一致问题
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 。





欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2