如何在PostgreSQL中存储和检索php serialize()



我刚从mySQL转换为PostgreSQL。在Postgresql中,我的字段(jobInfo)是(bytea)格式的斑点。

SELECT folderName, jobInfo
FROM jobs

在MySQL中,该字段是作为一个可能不详细化的字符串。但是,当我从Postgres中阅读数据时,它看起来像这样:

[.....]

在PHP或Postgres中有办法将其解码回文本字符的序列化字符串?

更新根据请求,这是用于创建MySQL Blob字段的代码:

$theJobInfo = serialize($theJobInfo);

和SQL查询:

UPDATE `jobs` SET `jobInfo` = theJobInfo
WHERE `folderName` = 'myFolderName'

您可以轻松地转换为byteatext,例如此

SELECT convert_from('foo'::bytea, 'UTF8');

但是,我认为这没有相关。

您正在使用PHP的serailize()功能

请注意,这是一个二进制字符串,可能包含null字节,并且需要以此此类存储和处理。例如,serialize()输出通常应存储在数据库中的BLOB字段中,而不是CHARTEXT字段。

该功能返回二进制数据。同样,unserialize() 期望二进制数据。如果您不想在PHP中使用二进制数据,则可以使jobs.jobinfo成为jsonb类型并将json_encode()的结果发送给其,然后从中将json_decode()

  • http://php.net/manual/en/function.json-decode.php
  • http://php.net/manual/en/function.json-encode.php

此代码从postgres bytea字段的内容中检索序列化字符串:

$serializedString = pg_unescape_bytea($contentsOfPostGresByteAField);

感谢Sergey Pashkov的提示!

最新更新