UNPA_Consulta sobre configuración de encoding en postgres-proyecto.ini-bases.ini

Buenos días les escribo porque desarrollamos una aplicación en toba 2.5.2 y tenemos dudas acerca de como debiera estar la codificación tanto de la base como en el base.ini; y además como debiera trasladarse esto a producción. La situación es la siguiente:

En toba desarrollo:

En el postgres:
base toba_2_5_2 encoding UTF8
base myExport encoding LATIN1

En bases.ini que se encuentra en …/toba_2.5.2/proyectos/myExport/instalacion/

[toba_2_5]
encoding = “LATIN1”
schema = “desarrollo”

[desarrollo myExport myExport]

encoding = “LATIN1”
schema = “”

Pensamos que la base toba_2_5_2 debiera estar en LATIN1 tambien pero si cambiamos la codificación se visualizan mal los nombres de las operaciones desde el toba_usuarios.

Entonces la pregunta es ¿ESTA CONFIGURACION ES CORRECTA? o debemos modificar algo?


Ahora bien cuando queremos empaquetar para llevar esto a producción tenemos lo siguiente:
En el proyecto.ini que se encuentra en …/toba_2.5.2/proyectos/myExport/, tenemos:

[base]
fuente = localhost
nombre = myexport
schema = public
encoding = SQL_ASCII
usuario_postgres = myexport
rol_postgres = myexport
estructura = sql/estructura.sql
languages = plpgsql
grupos_datos = myexport

¿AQUI EL ENCODING DEBIERA SER LATIN1?

El instalador que genera instalador_myExport tiene en el bases.ini que se encuentra en instalador_myexport/1.0.0/proyectos/myExport/aplicacion/instalacion/, lo mismo que el bases.ini de toba_desarrollo:

[toba_2_5]
encoding = “LATIN1”
schema = “desarrollo”

[desarrollo myExport myExport]
encoding = “LATIN1”
schema = “”


Una vez instalado en produccion nos queda lo siguiente:

EN EL POSTGRES base myExport con encoding UTF8, y le hacemos update pg_database set encoding=8 where datname=‘myExport’ para que quede en LATIN1 sino no levanta los datos que tienen caracteres especiales cuando importamos datos desde la aplicación.
ESTO ES CORRECTO? O SOLO debieramos modificar en el bases.ini y colocar encoding LATIN1?

En el bases.ini que se encuentra en tenemos:

[toba_2_5]
encoding = “LATIN1” ¿DE DONDE TOMA ESTA CODIFICACION?
schema = “desarrollo”

[produccion myExport myExport]
encoding = “SQL_ASCII” ¿ESTO LO TOMA DEL ARCHIVO POSTGRES.INI?
schema = “”

Resumiendo, ¿cual seria la configuración correcta tanto en el postgres como en el proyecto.ini y en bases.ini EN DESARROLLO Y EN PRODUCCION?

Una vez instalado en produccion, debo hacer algun cambio en el bases.ini? o antes de empaquetar debo editar lo que sea necesario en el proyecto.ini.

Desde ya muchas gracias.

Saludos
Paola
Universidad Nacional de la Patagonia Austral

Hola Paola,

Es la configuracion correcta, las bases se especifican con encoding LATIN1 en bases.ini y es postgres el encargado de hacer la conversion, entre lo que se envia via framework y lo que utiliza el cluster.
Esto depende igual de la version de Postgresql que tengan, al menos deberia ser una version 8.4 creo para que funcione, en las anteriores dicha conversion no es posible.

Lo otro a tener en cuenta, es que si se accede directamente al motor via pgAdmin por ejemplo y no se tiene el client_encoding en LATIN1, lo mas probable es que use el mismo del cluster, con lo que alguna insercion con caracteres especiales puede no visualizarse correctamente una vez se intenta convertir a LATIN1 para su uso en Toba.

Ahora bien cuando queremos empaquetar para llevar esto a producción tenemos lo siguiente: En el proyecto.ini que se encuentra en ../toba_2.5.2/proyectos/myExport/, tenemos:

[base]
fuente = localhost
nombre = myexport
schema = public
encoding = SQL_ASCII
usuario_postgres = myexport
rol_postgres = myexport
estructura = sql/estructura.sql
languages = plpgsql
grupos_datos = myexport

¿AQUI EL ENCODING DEBIERA SER LATIN1?


Si… el encoding deberia ser aquel que maneja el sistema, SQL_ASCII seria un raw(seria raro usar esto)… por el momento el sistema que utilice Toba como framework maneja normalmente LATIN1, con lo cual la variable que se configura deberia ser LATIN1.

Una vez instalado en produccion nos queda lo siguiente:

EN EL POSTGRES base myExport con encoding UTF8, y le hacemos update pg_database set encoding=8 where datname=‘myExport’ para que quede en LATIN1 sino no levanta los datos que tienen caracteres especiales cuando importamos datos desde la aplicación.
ESTO ES CORRECTO? O SOLO debieramos modificar en el bases.ini y colocar encoding LATIN1?


Como te decia mas arriba, depende de la version de postgresql que tengan… si es mayor a 8.4, solamente deberian tocar el archivo bases.ini.

En el bases.ini que se encuentra en tenemos: [toba_2_5] encoding = "LATIN1" ¿DE DONDE TOMA ESTA CODIFICACION? schema = "desarrollo"
Es la codificacion por defecto que se intenta colocar al crear la bd, eso especifica que independientemente del encoding del cluster... el encoding que usa Toba es LATIN1 y que la comunicacion se va a realizar basada en ese encoding.
[produccion myExport myExport] encoding = "SQL_ASCII" ¿ESTO LO TOMA DEL ARCHIVO POSTGRES.INI? schema = ""
No, eso lo toma del archivo proyecto.ini de la configuracion que pegaste mas arriba, si no lo modificas en el manejador de negocio o lo preguntas durante la instalacion, queda con ese valor.

En general, en el archivo bases.ini… siempre debe figurar como encoding LATIN1, la unica excepcion es en WINDOWS donde puede figurar un WIN_1252 (simil) o que el proyecto especificamente necesite de un encoding particular diferente de los expuestos arriba. La regla seria esa.

Saludos

PD: Fijate que aca tocamos un poco el tema.

Hola Richard,

Ok. Ya tengo el panorama mas claro. La unica duda que me quedo es la siguiente:
En toba desarrollo la base en el postgres la tenemos en UTF8 y la base myExport también, tomando lo que me dijiste de que la configuración la debemos hacer en el bases.ini. ¿Podriamos tener en el postgres las dos bases en UTF8 y en bases.ini las dos en LATIN1?.

Muchas gracias!

Saludos
Paola
Universidad Nacional de la Patagonia Austral

Hola Paola,

lo que definis en bases.ini, se usa para especificar el encoding del cliente, eso lo deberias tener en LATIN1 para cualquier base que crees. En el motor, podes usar UTF-8 sin problemas ya que solo se encarga de hacer la conversion, es lo que te comentaba antes, asi que si… podes tener las dos bases en UTF-8 en el motor… y las dos con LATIN1 en bases.ini. Solo recuerden que si incluyen datos mediante algun script deben especificar el encoding de los datos, sino despues van a tener ensalada de caracteres.

Saludos

Buenas, Richard. En mi caso, tengo la base UTF-8 pero en bases.ini lo especifique como LATIN1. Sin embargo, no visualizo correctamente la Ñ. Que puedo hacer?

SOLUCIONADO: Cuando visualizo en el cuadro los valores con la Opción TODAS EN MAYUSCULA no se visualiza correctamente los caracteres Unicode, pero se soluciona quitando dicha opción.

Hola Cristian

es extraño esto que mencionas por dos motivos:

  • No tiene que haber diferencias entre mayusculas y minusculas, los caracteres los ves o no los ves.
  • No te deberian llegar caracteres en Unicode a PHP… se supone que postgres ya se encargo de la conversion.

Esos valores los dieron de alta por el sistema o los incorporaron de otra manera?.

Saludos

Hola Richard!

El problema no son las mayúsculas, interpreto. El tema es que al aplicar esa función (desde la interfaz de Toba al darle formato a los campos de la tabla con la opción Todas Mayúsculas) al parecer devuelve los datos con otra codificación y no UTF-8. O sea, creo que el error puede estar en la libreria que maneja ese método. Si no aplico y dejo como está, aparece todo bien, sin ningún problema. Me explico?

Hola Cristian,

toba maneja todos los datos en LATIN1, no usa UTF-8 por eso te comentaba lo de la base de datos, se supone que la conexion hace la conversion de un charset a otro (en caso que tengas el cluster en UTF-8). La función que pasa a mayusculas es un simple strtoupper, no especifica encoding alguno, lo unico que tiene incidencia en dicha funcion es el locale que tengas especificado en el SO.

Por ahi en problema esta en que difiere lo que vos queres enviar al cliente, de lo que efectivamente toba envia… ahi seguro vas a ver las cosas torcidas.

Saludos