2011-06-08 18 views
5

Tengo un problema durante la inserción masiva. Estoy tratando de hacer la inserción masiva desde el archivo con la codificación LATIN1 en la tabla donde la base de datos con la codificación UTF8.Postgres COPY archivo con codificación LATIN1 en la tabla con codificación UTF

invalid byte sequence for encoding "UTF8": 0xc33f 

Cuando he puesto CLIENT_ENCODING = 'LATIN1' y después de no copiar de la consola, que funciona bien. pero JDBC me dice que no puede hacer SET CLIENT_ENCODING.

Por favor, podría sugerir una solución sobre cómo puedo solucionar el problema. ¡Gracias!

+0

¿Por qué no puedes enviar una declaración 'set client_encoding' como raw sql en jdbc? –

+0

sí, como una consulta SQL ejecutada por medio de jdbc. También probé agregar settter en el procedimiento almacenado antes de la operación COPY pero con el mismo error. – Tioma

Respuesta

4

Intente establecer el parámetro de conexión allowEncodingChanges en true para permitir (temporalmente) cambiar la codificación del cliente a LATIN1. De acuerdo con Table 22-2 PostgreSQL debe manejar la conversión automática de conjunto de caracteres entre LATIN1 (cliente) y UTF8 (servidor).

La configuración client_encoding está establecida por el controlador y no debe modificarse. Si el controlador detecta un cambio, cancelará la conexión . Hay una excepción legítima a este comportamiento embargo, utilizando el comando COPY en un archivo que reside en sistema de archivos del servidor. El único medio de que especifica la codificación de este archivo es mediante la alteración de la configuración client_encoding .

Habilítelo solo si necesita para anular la codificación del cliente cuando está haciendo una copia.

+1

Gracias! Es una solución. Puede ser que sepa cuál es la consecuencia de allowEncodingChanges = true. – Tioma

Cuestiones relacionadas