No se pueden seleccionar algunas filas con npgsql en una base de datos "portuguesa"

c# dapper encoding npgsql postgresql

Pregunta

Tengo una base de datos postgresql que se creó con "SQL_ASCII" y la plantilla "template0". Tiene datos en portugués, así que tengo datos como "Não", "Feijão", "Avá". Cuando intento recuperar filas que tienen este tipo de caracteres "~ ^", no funciona, de lo contrario, funciona.

Errores:

  • "Error al analizar la columna 6 (sempresa = 0 - String)"}
  • Mensaje = "No se puede convertir el byte [C3] en el índice 0 de la página de códigos especificada para Unicode".

Estoy usando Npgsql y Dapper

<packages>
  <package id="Dapper" version="1.50.2" targetFramework="net45" />
  <package id="Npgsql" version="3.1.7" targetFramework="net45" />
</packages>

Busqué mucho pero nada funciona. He intentado:

Configurar la codificación del cliente en la cadena de conexión:

var sqlBuilder = new NpgsqlConnectionStringBuilder
                {
                    Host = host,
                    Database = database,
                    Username = user,
                    Password = password,
                    Pooling = false,
                    ClientEncoding = "SQL_ASCII" 
                    // I also tried "UNICODE", "utf8", "win-1252"
                };

También traté de ejecutar un comando que no sea de consulta para cambiar el código antes de seleccionar

 // I tried a lot of encondings: SQL_ASCII, win-1252, unicode
 connection.Execute("set client_encoding = 'SQL_ASCII'");

 var data = connection.Query<T>(strSQL);

NO PUEDO cambiar la base de datos ni volver a crear la base de datos porque la aplicación se ejecutará contra muchas bases de datos de producción.

Espero que nadie defienda esta pregunta como duplicada. Realmente traté de resolver con otras preguntas, pero nada de lo que encontré funcionó.

Respuesta aceptada

He agregado compatibilidad para codificaciones que no sean UTF8 a Npgsql. Esto realmente debería usarse solo en casos de borde especiales como este, donde la base de datos se creó con SQL_ASCII, contiene caracteres que no son ASCII, y un cambio de codificación es imposible.

He apoyado este soporte para la próxima versión de parche, 3.1.8 (parece bastante inofensivo). En este momento hay algunos problemas con el servidor de compilación, pero si espera unos días, debe tener un paquete de IC de 3.1.8 disponible con la nueva compatibilidad en http://myget.org/gallery/npgsql . Siga https://github.com/npgsql/npgsql/issues/392 para obtener más actualizaciones / progresos.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué