2

当我尝试从数据库中读取 blob 数据时,我有这样的事情:

xffd8ffe000104a46494600010201006000600000...

它只在 Windows 操作系统上,在 linux 上它可以正常工作

sql:

select lob from table where id = ...

尝试使用::bytea,没有任何改变

在 php 中只需使用 PDO 获取和file_put_contents

我可以使用 xml 转换数据convert_from(lob, 'UTF8'),但我需要二进制数据的解决方案(例如 zip)

更新:php代码

$db = new PDO('pgsql:...');
$pds = $db->prepare("select lob from table where id = :id");
$pds->bindParam('id', $id);
$pds->execute();
$r = $pds->fetch(PDO::FETCH_ASSOC);
file_put_contents('Chrysanthemum.jpg', $r['lob']);
4

1 回答 1

2

bytea_output参数设置为时,问题中显示的十六进制字符串是由 PostgreSQL 9.0 或更高版本生成的hex

该问题的一个合理原因是您在 Windows 上的 PHP 与 9.0 之前的版本相关联libpq。这些旧版本不会解码这些内容。

您可以升级到更新的libpq,或者作为一种解决方法,您可以在选择任何 bytea 值之前执行以下操作:

$db->query("SET bytea_output=escape");

这将(对于当前会话)将 bytea 文本表示恢复为旧版本和新版本都libpq可以解码的旧方式。

于 2013-02-27T13:11:41.403 回答