Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中存储和检索PHP serialize()?_Php_Postgresql_Encoding_Character Encoding - Fatal编程技术网

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

如何在PostgreSQL中存储和检索PHP serialize()?,php,postgresql,encoding,character-encoding,Php,Postgresql,Encoding,Character Encoding,我刚从MySQL转换成PostgreSQL。在PostgreSQL中,我的字段(jobInfo)是(bytea)格式的blob 在mySQL中,该字段作为字符串输入,可以不序列化。然而,当我从postgres中读取数据时,它看起来是这样的: \X613A31353A3A7B733A313A3A3123A3A2234223B733A3333A22342E3A3A373A30223B733A3226A662 [……] 在PHP或postgres中,有没有办法将其解码回文本字符的序列化字符串 更新 对

我刚从MySQL转换成PostgreSQL。在PostgreSQL中,我的字段(
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.jobinfoa
jsonb
键入并将
json\u encode()
的结果发送给它,然后从中选择
json\u decode()


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

$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');