Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Diferencia resultados consulta en MariaDB y PWC9 (https://www.cobolforo.es/showthread.php?t=1773)

Josber 7 de junio de 2024 13:30

Diferencia resultados consulta en MariaDB y PWC9
 
Resulta que una misma instrucción ejecutada desde PWC9, (mediante un EXEC SQL), o desde un gestor de BD de MariaDB, (una versión "libre" de MySql), da distintos resultados, ¿alguien tiene una idea de por qué puede ser?

La instrucción es ésta:

Código SQL:
  1. SELECT COUNT(CLICOD) FROM CLIENTES WHERE CLICOD > TRIM(     333) AND CLIORG LIKE CONCAT_WS('','%',TRIM('ZACIÓN                                            '),'%') AND CLINOM LIKE CONCAT_WS('','%',TRIM('ENTE                          '),'%')"

En en gestor, el resultado es 140, (que es el correcto) y en PWC, el resultado es 0, (sin errores en SQLSTATE, ni nada por el estilo), con otras instrucciones no pasa, pero cuando hay varios "AND", falla.

Muchas gracias

Kuk 7 de junio de 2024 20:49

@Josber, lo de las comillas dobles al final imagino que es el copy/paste...

Por lo pronto se me ocurre una sintaxis más ligera:

Código SQL:
  1. SELECT COUNT(CLICOD)
  2.   FROM CLIENTES
  3.  WHERE CLICOD > TRIM(     333)
  4.    AND CLIORG LIKE '%' || TRIM('ZACIÓN                                            ') || '%'
  5.    AND CLINOM LIKE '%' || TRIM('ENTE                          ') || '%'

Me parece que va a ser problema de codificación de caracteres, es decir que en este caso el valor "ZACIÓN" lleva tilde y puede que no se pase correctamente en la consulta y se interprete por otro caracter en el lado BBDD.

Intenta la misma consulta pero donde ambos valores alfanuméricos son letras sin acentos y compara a ver. Si el resultado es correcto (el valor es el mismo), eso es que hemos encontrado el problema.

Josber 7 de junio de 2024 22:11

Gracias @Kuk, sí lo de las comillas, ha sido el copy/pega, y lo tengo que hacer así de largo, porque es un montaje con un string, por eso está el tema de CONCAT_WS, en cuanto al acento, pues no he probado a no ponerlo, mañana hago la prueba a ver, todas las tablas las creo con COLLATE='utf8_spanish_ci, porque de lo contario, se da de bofetadas con las Ñs, acentos y demás

Un saludo

Kuk 8 de junio de 2024 10:49

@Josber, UTF8 es una codificación Unicode, multi-byte, cosa que se puede tratar en PowerCOBOL únicamente con PIC N (N=National) y se configura la codificación a nivel de proyecto y trae alguna que otra complicación a nivel código. Es un tema que pocos hacemos mucho caso pero es importante.

El caso es que existe codificación mono-byte para el Español y no necesitas para nada Unicode como UTF8.

Pon el cotejamiento en latin1_spanish_ci

Echa on ojo a esto: https://blog.unreal4u.com/2012/08/so...rset-en-mysql/

Cita:

Citación del post de Charset y Collation
Una de las primeras cosas que se deben saber es el cómo un CHARSET u otro guarda la información. Para ser muy breves y concisos, utf8 ocupa hasta 3 bytes en cada caracter, mientras que latin1 siempre ocupará 1 solo byte.

Y eso de 1 byte es lo que necesitamos justamente en Cobol para poder tratar el dato de manera natural que es con PIC X.

Estoy casi seguro que el problema viene de ahí.

Kuk 8 de junio de 2024 13:24

@Josber, una cosa importante que se me olvidaba: cuando los datos ya están dentro de la BBDD creo que cambiando la codificación no cambia cómo el dato está guardado (es decir que seguirían en UTF8). Así que hay que tener cuidado con esto si se confirma que con los datos sin tildes no hay problema, habría que mirar cómo convertir los datos ya existentes.

Josber 8 de junio de 2024 18:17

@Kuk, cuando ya están, el formato no cambia pero, como es una tabla de pruebas y los C.P., están en una hoja de Excel que me bajé de la página de Correos, creo recordar, sin problemas para "cepillarme" la tabla y volver a crearla.

Gracias por todo

Kuk 11 de junio de 2024 09:28

@Josber, qué tal? Has hecho las pruebas?

Josber 11 de junio de 2024 11:58

Cita:

Citación del post de Kuk (Mensaje 9453)
@Josber, qué tal? Has hecho las pruebas?

Las hice ayer tarde, borré la tabla, la cree cambiando el COLLATE por latin1_spanis_ci y me sigue pasando lo mismo, en cuanto pongo un acento en PWC, ya no funciona la consulta, sin embargo, directamente en el gestor de BDs, funciona perfecto. :llora: :llora:

Sigo investigando ....

Kuk 11 de junio de 2024 17:17

@Josber, no sé qué versión de Power estás utilizando. Qué tienes como valor en RCS cuando haces clic en el Proyecto?

Yo creo que es cuestión de ir probando. Prueba con latin1_general_ci

Mientras yo voy mirando a ver si encuentro más info.

Josber 11 de junio de 2024 20:31

Cita:

Citación del post de Kuk (Mensaje 9457)
@Josber, Qué tienes como valor en RCS cuando haces clic en el Proyecto?.

Prueba con latin1_general_ci

No sé que es exactamente lo de RCS, la versión es PWC 9, he probado con latin1_general_ci, latin1_sweedish_ci, y varios más y el resultado siempre es el mismo, incluso he puesto BINARY, para que tome en cuenta las mayúscula y minúsculas.

Yo también sigo buscando, más que nada porque no es lo mismo buscar, por ejemplo, continuo que continuó y como los campos de búsqueda que tengo definidos incluye las observaciones, ahí puede haber de todo escrito, porque si fueran sólo los nombres y apellidos o direcciones, me daría igual.

*PD, me acabo de dar cuenta que con las Ñs, tampoco funciona, y eso ya es más importante, así que tiene que ser cuestión de elegir el "COLLATE" correcto, lo que me fastidia, es que tengo otras tablas en otros programas con latin1_spanis y utf8_spanish y funciona perfectamente. Voy a borrar la BD por completo y crear de nuevo las tablas a ver si tengo suerte y es un fallo en la creación

Muchas gracias.-


La franja horaria es GMT +2. Ahora son las 16:19.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.