Acentos y caracteres especiales desde script sql en MySQL

Published on

in

Entre mi quehacer en la programación, eventualmente me topé con el que creo es un inconveniente para todo el mundo que no usa el idioma Inglés, y para el particular caso de los hispanohablantes, consiste en usar caracteres especiales en base de datos como son las vocales con acentos (tildes), la letra Ñ/ñ, ü con diéresis, los signos de apertura interrogativos y exclamativos ¡¿, y algún otro que se me pase mencionar.

badencoding

Numerosas ocasiones he tenido este problema, con diferentes motores de base de datos: si usas el cliente en turno del motor, puedes manipular sin problemas los datos, las Ñs están ahí, pero apenas quieres automatizar la carga de datos desde archivo (no vas a estar haciendo inserts manualmente), el motor pasa del tema y los inserta como mejor le place… o eso parece.

Casi en cada ocasión que busco la receta para usar estos caracteres, termino en StackOverflow. He visto que en ocasiones, el propio autor de la pregunta, en ausencia de una respuesta en tiempo, o una respuesta satisfactoria, regresa a describir la solución en modo de respuesta a los demás y como recordatorio personal.

Esta crónica es precisamente eso, el momento de dejar este recordatorio y comentario para mis congéneres hispanohablantes (y para mí mismo) que requieran usar caracteres del español al cargar datos desde archivo en MySQL o MariaDB (u otro fork).

En el caso particular de MySQL, para lograr leer y escribir caracteres del español, es decir, que al cargar los datos no cambie la á por A|, es necesario hacer dos cosas:

  1. Haber creado la base de datos, o la tabla en turno, con un conjunto de caracteres que acepte los caracteres que se necesitan: utf-8, o algún estándar de los ISOs que se acomode a las necesidades de almacenamiento.
  2. Al importar datos desde un script, sea desde consola con el comando mysql .. < script.sql, o ya habiendo hecho inicio de sesión en consola en MySQL, con el comando source script.sql, a fin de que interprete los textos correctamente es necesario agregar la siguiente instrucción antes del resto de enunciados SQL del script:
 set names 'utf8';

Esta instrucción es la que hará la magia. Le indica al motor de base de datos la forma en qué están codificados los datos para que pueda interpretarlos correctamente al leerlos y escribirlos desde y hacia su repositorio. Evidentemente es necesario ajustar la instrucción y usar la codificación elegida entre las comillas que siguen a set names.

Y listo, los caracteres especiales estarán en la base de datos sin conversiones.

La documentación de la sintaxis completa se puede consultar en la ruta a continuación:

https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html

Hasta aquí con esta crónica.

Deja un comentario

Descubre más desde Crónicas de Programación

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo