当我使用HDBC-postgreSQL驱动程序(版本2.3.2.3)在Postgres数据库中选择填充二进制数据的**Solutions Count**
Between 100-500 2
Between 500-1000 3
Between 1000-1500 3
Between 1500-2000 2
字段时,它们显示为:
bytea
也就是说,它返回一个SqlByteString "\x<hex representation of binary data>"
,其中包含一个包含ByteString
的字符串,后跟我的二进制数据的十六进制表示。这很不方便,效率极低,对我来说基本没用。
是否有任何理由不返回包含字节字符串的\x
,其中包含实际的二进制数据?是否有我遗漏的东西,或者我如何配置驱动程序来做到这一点?
感谢
答案 0 :(得分:1)
这是该库的一个长期已知问题。例如,请参阅this bug。
更广泛的问题是获取原始字节需要相当多的聪明才能使postgres api显而易见。你必须使用二进制而不是文本输出来调用整个查询(无论如何这可能更好,但需要重写绑定层的那一部分)。
你可以看到where pqexecparams is called并注意它的最后一个参数为0,postgres docs表示一切都以文本形式返回。对于postgres,这意味着你看到这个有趣的十六进制表示。
如果该参数被交换为1,那么事情可以更有效地完成(包括获取bytea
字段的原始二进制文件)但是必须普遍重写Statement.hsc
以反序列化这些二进制值。 / p>
这是其中一个对许多人有点刺激的事情之一,但是没有人有足够的动力来重写和调试整个事情。但是,当然,有人真的应该! : - )
答案 1 :(得分:1)
我已经解决了这个问题,转到postgresql.conf并添加:
bytea_output = 'escape' #by default, it's 'hex'
这个剂量是什么,它现在可以完全按照插入方式检索数据,因为输出不再被编码。
我知道现在已经很晚了,我也是Stack Overflow的新手,但我教这个信息很重要。