Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Error 22008 de MaríaDb en INSERT/UPDATE (https://www.cobolforo.es/showthread.php?t=1882)

Josber 20 de enero de 2026 16:51

Error 22008 de MaríaDb en INSERT/UPDATE
 
1 Archivos Adjunto(s)
¡¡¡ Hooolaa a tod@s de nuevo !!!

Hace ya tiempo que no posteo por aquí, entre otras cosas porque esto está últimamente muy silencioso, no sé si porque la gente es muy lista y ya no tiene dudas, o que todas las posibles dudas están ya solucionadas, (cosa que dudo bastante ... :lamet::lamet:), bueno a lo que íbamos, hace unos meses que dejé de programar, por medio-jubilación y, sobre todo, por el tema del VERIFACTU y lo que se nos viene encima después, (y que aún no se sabe oficialmente), ya no estoy para "certificar" programas, hacer pruebas de conexiones con hacienda y demás chorradas que exigen, así que mi consejo a los pocos clientes que aún mantenía, "cambiar a otro programa que esté certificado, porque el mío, no lo va a estar", "yo os ayudaré en todo lo posible", etc, etc.

Aún así, tengo un buen cliente que se cambió a SAGE50 pero, necesita hacer "albaranes especiales", así que estoy haciéndole un pequeño programa que pueda leer los artículos, clientes, etc de SAGE50, y grabar esos albaranes. Uso el entorno de MaríaDb, por no mezclar con SQLServer, que es el que usa Sage y por costumbre también, el problema es que al descargar la última versión de MaríaDb, (12.1.2), y del conector ODBC (3.28), el problema es que al grabar un registro que lleve caracteres especiales españoles, (ñ Ñ á ó ....), devuelve en SQLSTATUS el error 22008, las tablas están definidas con

Código SQL:
  1. COLLATE='utf8mb4_uca1400_spanish_ai_cs'

el fichero de configuración de my.ini, tiene añadidas las líneas

Código SQL:
  1. character-set-server = utf8mb4
  2. collation-server = utf8mb4_uca1400_spanish_ai_cs

y no había manera, tanto en un INSERT, como en un UPDATE, daba error. En las versiones anteriores de MariaDb, esto no pasaba, pues ni el DSN ni MariaDb eran tan estrictos, pero en la nuevas, sí, porque se comprueba mucho más el cotejamiento de datos, después de varios días y muuuuuchas pruebas, la solución es tan sencilla como que, al crear el DSN (ODBC para los despistados), añadirle la opción SET NAMES latin1, así, le estamos diciendo al ODBC que los datos que le van a llegar son con codificación latin1, (que es la que usa por defecto PowerCobol, pero que ha de convertirlos a utf8mb4, (la conversión inversa, ya la hace PWC automáticamente sin que le tengamos que decir nada)

Por cierto, uso utf8mb4_uca1400_spanish_ai_cs, (un COLLATE nuevo), porque es de las más rápidas y fiables para ordenaciones, consultas, etc, mucho más que la antigua utf8mb3_spanish_ci

Un salu2 para [email protected]

Kuk 25 de enero de 2026 19:34

@Josber, esto de las codificaciones es un lío, y soy el primero en hacerme un lío, pero por lo que sé, latin1 es monobyte, formando parte de ASCII: ASCII/ISO 8859 (Latin-1) Table
Los utf8 son todos multibyte y cubren ASCII en todas sus vertientes... :piensa: :losiento:

Josber 26 de enero de 2026 19:31

Correcto @Kuk, un puñetero lío, con Latin1, no me reconoce los caracteres especiales tipo ä. á, ñ, Ñ ...., ya no sé si es porque los datos vienen de una tabla en SqlServer y MariaDb tiene otras codificaciones distintas a SQL o es culpa del demonio, el caso es que me ha costado un "güebo" arreglarlo pero como he puesto en el post anterior, así funciona perfectamente :)


La franja horaria es GMT +2. Ahora son las 23:46.

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