我刚从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'
您可以轻松地转换为bytea
和text
,例如此
SELECT convert_from('foo'::bytea, 'UTF8');
但是,我认为这没有相关。
您正在使用PHP的serailize()
功能
请注意,这是一个二进制字符串,可能包含null字节,并且需要以此此类存储和处理。例如,
serialize()
输出通常应存储在数据库中的BLOB
字段中,而不是CHAR
或TEXT
字段。
该功能返回二进制数据。同样,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的提示!