DDC-3241: object type fails to save serialized class to postgresql #4029

Open
doctrinebot opened this Issue Aug 5, 2014 · 7 comments

2 participants

@doctrinebot

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.

@doctrinebot

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.

@doctrinebot

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.

@doctrinebot

Comment created by @ocramius:

[~renoreckling] just open a pull request against the doctrine/doctrine2 repository

@doctrinebot

Comment created by @doctrinebot:

A related Github Pull-Request [GH-653] was closed:
doctrine/dbal#653

@doctrinebot

Comment created by @ocramius:

Merged DBAL-964, but the issue persists here.

@beberlei beberlei was assigned by doctrinebot Dec 6, 2015
@doctrinebot doctrinebot added the Bug label Dec 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment