Jira issue originally created by user renoreckling:
Doctrine 2 fails to properly store data from serialize() into postgresql.
This happens because the postgresql pdo driver truncates text on NULL bytes when escaping values. This leads to truncated serialized objects being inserted into the database.
A ugly but working workaround for us is to call jsonencode(serialize()) when saving to the database and unserialize(json_decode()) when reading the value back because jsonencode properly serializes the NULL bytes of the serialize() output to readable text.
This is pretty ugly though and it would help if doctrine would provide a minimal encoding/decoding function for postgresql that converts all NULL bytes to something else to not break the object type on postgresql.
Comment created by @ocramius:
I'm fairly sure that we don't want to invent our own serialization format. Instead, base64_encode could work.
Due to BC compat, we can't introduce it for 2.x, so it would have to be a completely new type.
Comment created by renoreckling:
Agreed, we'll just go with base64_encode for now.
Maybe someone should update the documentation that using the object type on postgresql is not working as well as that using binary strings containing a NULL byte in any varchar/text column on postgresql is not working either.
[~renoreckling] just open a pull request against the doctrine/doctrine2 repository
[~ocramius] Here you go: doctrine/dbal#653
Thanks for the reply.
Comment created by @doctrinebot:
A related Github Pull-Request [GH-653] was closed:
Merged DBAL-964, but the issue persists here.