Si tenemos que hacer un backup de una base de datos MySQL, recomiendo leer Cómo efectuar una copia y restauración de una base de datos con SSH para hacerlo. Si entramos en la base con nuestro gestor, generalmente phpMyAdmin, y observamos los caracteres de los registros de una determinada tabla vemos que contienen vocales acentuadas, eñes o signos de interrogación. Si hacemos un backup y posteriormente un restore en otra base, comprobaremos que los caracteres típicos de nuestro idioma se han convertido en símbolos indescifrables, y así aparecerán en las páginas de nuestro sitio. Algo extraño ha ocurrido. ¿Qué ha pasado?
Los textos han llegado originalmente a la base de datos desde un formulario en una página web. Esta página soporta el código de caracteres iso-8859-1, o lo que es lo mismo latin1. Al hacer el backup, el sistema MySQL utiliza el juego de caracteres UTF-8 (no siempre ocurre así). Parte del resultado observado en el archivo SQL que se obtiene del backup puede ser muy parecido al que mostramos a continuación:
INSERT INTO `jos_components` (`id`, `name`, `link`, `menuid`, `parent`, `admin_menu_link`, `admin_menu_alt`, `option`, `ordering`, `admin_menu_img`, `iscore`, `params`) VALUES (1, 'Banners', '', 0, 0, '', 'Gestión de banners', 'com_banners', 0, 'js/ThemeOffice/component.png', 0, ''), (2, 'Banners', '', 0, 1, 'option=com_banners', 'Banners activos', 'com_banners', 1, 'js/ThemeOffice /edit.png', 0, ''), (3, 'Clientes', '', 0, 1, 'option=com_banners&task=listclients', 'Administrar clientes', 'com_banners', 2, 'js/ThemeOffice/categories.png', 0, ''), (4, 'Enlaces Web', 'option=com_weblinks', 0, 0, '', 'Administrar enlaces web', 'com_weblinks', 0, 'js/ThemeOffice/globe2.png', 0, ''), (5, 'Enlaces Web', '', 0, 4, 'option=com_weblinks', 'Ver enlaces web', 'com_weblinks', 1, 'js/ThemeOffice/edit.png', 0, ''), (6, 'CategorÃas', '', 0, 4, 'option=categories§ion=com_weblinks', 'Administrar categorÃas de enlaces', '', 2, 'js/ThemeOffice/categories.png', 0, ''), (7, 'Contactos', 'option=com_contact', 0, 0, '', 'Editar detalles de contacto', 'com_contact', 0, 'js/ThemeOffice/user.png', 1, ''), (8, 'Gestión de Contactos', '', 0, 7, 'option=com_contact','Editar detalles de contacto', 'com_contact', 0, 'js/ThemeOffice/edit.png', 1, ''), ...
Al hacer la restauración, en la nuevas tablas se verán los caracteres tal como aparecen en el archivo SQL. Para evitarlo hay que, antes de nada, abrir el archivo SQL y añadir en la parte superior la instrucción siguiente: SET NAMES utf8;
Veremos ahora que los caracteres especiales aparecen en los registros de las tablas tal como estaban en la base de datos original.