重庆思庄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