Saltar al contenido

Error de Postgres al insertar – ERROR: secuencia de bytes no válida para codificar “UTF8”: 0x00

Solución:

PostgreSQL no admite el almacenamiento de caracteres NULL ( 0x00) en los campos de texto (esto obviamente es diferente del valor NULL de la base de datos, que es totalmente compatible).

Fuente: http://www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-UESCAPE

Si necesita almacenar el carácter NULL, debe usar un campo bytea, que debería almacenar todo lo que desee, pero no admitirá operaciones de texto en él.

Dado que PostgreSQL no lo admite en valores de texto, no hay una buena manera de conseguir que lo elimine. Podrías importar tus datos a bytea y luego convertirlos en texto usando una función especial (¿en perl o algo así, tal vez?), Pero probablemente será más fácil hacerlo en el preprocesamiento antes de cargarlo.

Solo regex hacia fuera bytes nulos:

s/x00//g;

Si está utilizando Java, puede simplemente reemplazar los caracteres x00 antes de la inserción como sigue:

myValue.replaceAll("u0000", "")

La solución fue proporcionada y explicada por Csaba en la siguiente publicación:

https://www.postgresql.org/message-id/1171970019.3101.328.camel%40coppola.muc.ecircle.de

Respectivamente:

en Java, puede tener un carácter “0x0” en su cadena, y eso es Unicode válido. Entonces eso se traduce al carácter 0x0 en UTF8, que a su vez no se acepta porque el servidor usa cadenas terminadas en nulo … así que la única forma es asegurarse de que sus cadenas no contengan el carácter ‘ u0000’.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *