Iniciar Sesión

Ver la Versión Completa : [Duda] Error 22008 de MaríaDb en INSERT/UPDATE


Josber
20 de enero de 2026, 16:51
¡¡¡ 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


COLLATE='utf8mb4_uca1400_spanish_ai_cs'


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


character-set-server = utf8mb4
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 (https://cs.stanford.edu/people/miles/iso8859.html)
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 :)