目次
- 1 1. Introducción
- 2 2. Conocimientos básicos sobre la codificación de caracteres y la colación en MySQL
- 3 3. Cómo verificar la codificación de caracteres actual en MySQL
- 4 4. Configuración y cambio de la codificación de caracteres
- 5 5. Diferencia entre utf8 y utf8mb4
- 6 6. Causas y medidas contra la corrupción de caracteres
- 7 7. Sección de Preguntas Frecuentes
- 8 8. Resumen
1. Introducción
MySQL es un sistema de gestión de bases de datos ampliamente utilizado en diversas aplicaciones. Entre sus aspectos, la configuración de la codificación de caracteres es un elemento crucial que afecta directamente la integridad de los datos y el rendimiento. Sin embargo, muchos desarrolladores se enfrentan a problemas porque desconocen la configuración adecuada de la codificación y cómo verificarla. En este artículo se explica detalladamente cómo comprobar la configuración de la codificación en MySQL, los pasos para cambiarla, las diferencias entre utf8 y utf8mb4, y las medidas para prevenir la corrupción de caracteres. Al leerlo, podrás adquirir desde conocimientos básicos hasta habilidades prácticas sobre la codificación en MySQL.2. Conocimientos básicos sobre la codificación de caracteres y la colación en MySQL
Qué es la codificación de caracteres
La codificación de caracteres es el método de codificación que permite a la computadora manejar los caracteres como datos digitales. Por ejemplo, UTF‑8 se usa ampliamente como una codificación que soporta una gran variedad de idiomas en todo el mundo. En MySQL, a menudo se utilizan como codificaciones predeterminadasutf8
y latin1
, pero en los últimos años se recomienda utf8mb4
.Qué es la colación
La colación (Collation) define las reglas para comparar y ordenar cadenas de texto. Por ejemplo,utf8_general_ci
y utf8_unicode_ci
son ambas colaciones para UTF‑8, pero utf8_unicode_ci
realiza comparaciones más precisas basadas en el estándar Unicode.Relación entre la codificación de caracteres y la colación
La codificación de caracteres define el método de codificación de los caracteres, y la colación define las reglas para comparar los caracteres basándose en esa codificación. Seleccionarlos adecuadamente ayuda a prevenir la corrupción de texto y la degradación del rendimiento.
3. Cómo verificar la codificación de caracteres actual en MySQL
En MySQL, la codificación de caracteres se configura a nivel de servidor, base de datos, tabla y columna. A continuación, se presentan los métodos para comprobar cada configuración de codificación.Comprobar la configuración de codificación del servidor completo
Para comprobar la configuración de codificación a nivel de servidor, ejecute el siguiente comando.SHOW VARIABLES LIKE 'character_set_%';
El resultado de este comando se muestra a continuación:+--------------------------+------------------+
| Variable_name | Value |
+--------------------------+------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
+--------------------------+------------------+
Significado de cada elemento:character_set_server
:Codificación de caracteres predeterminada del servidor.character_set_database
:Codificación de caracteres predeterminada de la base de datos.
Comprobar la codificación de caracteres a nivel de base de datos
Para comprobar la configuración de codificación de una base de datos específica, use el siguiente comando.SHOW CREATE DATABASE database_name;
Ejemplo de salida:CREATE DATABASE `database_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
Comprobar la codificación de caracteres a nivel de tabla y columna
Para comprobar la codificación de tablas y columnas, use los siguientes comandos. A nivel de tabla:SHOW CREATE TABLE table_name;
A nivel de columna:SHOW FULL COLUMNS FROM table_name;
Ejemplo de salida:+----------------+--------------+------------------+-------+
| Field | Type | Collation | Null |
+----------------+--------------+------------------+-------+
| column_name | varchar(255) | utf8mb4_unicode_ci | YES |
+----------------+--------------+------------------+-------+
Al utilizar estos comandos, puede verificar si la codificación de caracteres está configurada correctamente.4. Configuración y cambio de la codificación de caracteres
La forma de cambiar la codificación de caracteres en MySQL varía según el nivel: a nivel de servidor, de base de datos, de tabla y de columna. A continuación se explican concretamente los métodos de configuración para cada caso.Cambio de configuración del servidor
Para cambiar la codificación de caracteres predeterminada a nivel de servidor, edite el archivo de configuración de MySQL (normalmentemy.cnf
o my.ini
). Pasos de configuración:- Abra el archivo de configuración.
sudo nano /etc/my.cnf
- Agregue o edite la siguiente configuración.
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
- Reinicie el servidor MySQL.
sudo systemctl restart mysqld
Cambio de configuración a nivel de base de datos
Para cambiar la codificación de caracteres de una base de datos específica, use el siguiente comando. Comando de cambio:ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ejemplo:ALTER DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Este comando cambia la codificación de caracteres predeterminada de la base de datos, pero no afecta a las tablas o datos existentes. Si necesita cambiar a nivel de tabla, consulte la siguiente sección.Cambio de configuración a nivel de tabla
Para cambiar la codificación de caracteres de una tabla existente, use el siguiente comando. Comando de cambio:ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ejemplo:ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Este comando también cambia la codificación de todos los campos dentro de la tabla.Cambio de configuración a nivel de columna
Si solo desea cambiar la codificación de un campo específico, haga lo siguiente. Comando de cambio:ALTER TABLE table_name MODIFY column_name column_type CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ejemplo:ALTER TABLE users MODIFY username VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
5. Diferencia entre utf8 y utf8mb4
Diferencias técnicas
- utf8: el utf8 de MySQL es en realidad un subconjunto de UTF-8 y solo admite hasta 3 bytes. Por ello, no puede manejar emojis ni algunos caracteres especiales (p. ej., 𠮷).
- utf8mb4: implementación completa de UTF-8, admite caracteres de hasta 4 bytes.
Por qué se recomienda utf8mb4
- Compatibilidad: en aplicaciones web y móviles modernas, cada vez se manejan más emojis y caracteres especiales.
- Estandarización: muchos CMS (p. ej., WordPress) recomiendan utf8mb4 por defecto.
Consideraciones al migrar
Al migrar de utf8 a utf8mb4, tenga en cuenta los siguientes puntos:- Tamaño de la base de datos: utf8mb4 usa hasta 4 bytes por carácter, lo que puede aumentar el tamaño de la base de datos.
- Datos existentes: se recomienda encarecidamente hacer una copia de seguridad antes de cambiar.
- Configuración de la aplicación: también debe configurar el juego de caracteres usado por la aplicación (p. ej., el juego de caracteres de conexión del cliente) a utf8mb4.
6. Causas y medidas contra la corrupción de caracteres
Principales causas de la corrupción de caracteres
- Desajuste de codificación de caracteres entre cliente y servidor
- Ejemplo: el cliente usa
latin1
y el servidor usautf8mb4
.
- Migración de datos inadecuada
- Cuando la codificación de caracteres no está configurada correctamente al importar datos.
- Configuración incorrecta de la aplicación
- Cuando la codificación especificada al conectar a la base de datos no es la adecuada.
Medidas concretas para prevenir la corrupción de caracteres
- Verificación y unificación de la configuración del servidor
- Verificar la configuración de codificación del servidor y mantener la consistencia en todos los niveles.
SHOW VARIABLES LIKE 'character_set_%';
- Ajuste de la configuración del cliente
- Especificar explícitamente la codificación al conectar el cliente.
SET NAMES utf8mb4;
- Precauciones al migrar datos
- Especificar la codificación correcta al importar.
mysql --default-character-set=utf8mb4 -u username -p database_name < dump.sql

7. Sección de Preguntas Frecuentes
Preguntas frecuentes
- ¿Cambiar a utf8mb4 afecta el rendimiento?
- En utf8mb4 el tamaño de los datos aumenta, por lo que en bases de datos extremadamente grandes puede haber un ligero impacto en el rendimiento. Sin embargo, en operaciones normales rara vez es un problema.
- ¿Hay riesgos al migrar de utf8 a utf8mb4?
- El proceso de migración en sí no presenta riesgos, pero es importante realizar una copia de seguridad previa para evitar pérdida de datos o problemas en la aplicación al convertir los datos existentes.
- ¿Qué cambia al modificar la intercalación?
- Permite comparaciones y ordenaciones de cadenas más precisas. En particular, para aplicaciones multilingües se recomienda
utf8mb4_unicode_ci
.