如何在PostgreSQL中存储和检索PHP serialize()?
我刚从MySQL转换成PostgreSQL。在PostgreSQL中,我的字段(如何在PostgreSQL中存储和检索PHP serialize()?,php,postgresql,encoding,character-encoding,Php,Postgresql,Encoding,Character Encoding,我刚从MySQL转换成PostgreSQL。在PostgreSQL中,我的字段(jobInfo)是(bytea)格式的blob 在mySQL中,该字段作为字符串输入,可以不序列化。然而,当我从postgres中读取数据时,它看起来是这样的: \X613A31353A3A7B733A313A3A3123A3A2234223B733A3333A22342E3A3A373A30223B733A3226A662 [……] 在PHP或postgres中,有没有办法将其解码回文本字符的序列化字符串 更新 对
jobInfo
)是(bytea
)格式的blob
在mySQL中,该字段作为字符串输入,可以不序列化。然而,当我从postgres中读取数据时,它看起来是这样的:
\X613A31353A3A7B733A313A3A3123A3A2234223B733A3333A22342E3A3A373A30223B733A3226A662
[……]
在PHP或postgres中,有没有办法将其解码回文本字符的序列化字符串
更新
对于每个请求,以下是用于最初创建mySQL Blob字段的代码:
$theJobInfo = serialize($theJobInfo);
和SQL查询:
UPDATE `jobs` SET `jobInfo` = theJobInfo
WHERE `folderName` = 'myFolderName'
您可以轻松地将
转换为bytea
和文本
,如下所示
SELECT convert_from('foo'::bytea, 'UTF8');
然而,我认为这与此无关
你用的是
请注意,这是一个二进制字符串,可能包含空字节,因此需要进行存储和处理。例如,serialize()
输出通常应存储在数据库中的BLOB
字段中,而不是CHAR
或TEXT
字段中
该函数返回二进制数据。同样,unserialize()
需要二进制数据。如果您不想在php中使用二进制数据,您可以让jobs.jobinfoajsonb
键入并将json\u encode()
的结果发送给它,然后从中选择json\u decode()
$serializedString=pg_unescape_bytea($contentsofspostgresbyteafield)代码>
谢谢你的提示 如果bytea字段表示一个PHP对象,您如何知道它作为一个字符串是有意义的?显示您最初用于在mysql/PHP中设置该字段的代码。因为它是序列化的。我已经从mySQL中保存和检索了数千次这些数据,因此我相信它作为一个字符串是有意义的。我已经根据您的请求用PHP/SQL代码更新了原始帖子<代码>\d psql中的作业
。我确实希望使用二进制数据。这就是为什么我要将它保存到mySQL中的Blob字段中。问题是,一旦我将它保存到postgres ByteA字段中,我如何将其检索为序列化字符串,然后再将其取消序列化?您不会将其检索为文本字符串。如果php不是哑af,则将其作为“二进制字符串”或“标量”检索。然后将标量(及其二进制内容)馈送到unserialize()
。json很难处理php对象。可以通过JsonSerializable对PHP对象进行json编码,但是将它们解码回原始对象(不是stdClass对象)的速度很慢。这就是为什么我想找出是否可以使用序列化的PHP对象。我们的评论是错误的。
SELECT convert_from('foo'::bytea, 'UTF8');