Cambiar charset y collation de base de datos


¿Qué son charset y collation?

El charset (juego de caracteres) define qué caracteres puede almacenar la base de datos (por ejemplo, UTF-8 permite caracteres de múltiples idiomas). El collation (colación) define cómo se ordenan y comparan esos caracteres.

Es importante usar el charset y collation correctos para evitar problemas con caracteres especiales, acentos y caracteres de otros idiomas.


Charsets y collations más comunes

  • utf8mb4: Soporta todos los caracteres Unicode, incluyendo emojis (recomendado)
  • utf8: Versión antigua, no soporta todos los caracteres Unicode
  • latin1: Solo caracteres latinos básicos

Collations comunes para utf8mb4:

  • utf8mb4_unicode_ci: Ordenamiento Unicode (recomendado)
  • utf8mb4_general_ci: Ordenamiento más rápido pero menos preciso
  • utf8mb4_spanish_ci: Ordenamiento específico para español

Verificar charset y collation actual

Para ver el charset y collation de una base de datos:

mysql -u root -p
USE nombre_base_datos;
SHOW CREATE DATABASE nombre_base_datos;

O consultar directamente:

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
FROM information_schema.SCHEMATA 
WHERE SCHEMA_NAME = 'nombre_base_datos';

Cambiar charset y collation de la base de datos

Método 1: ALTER DATABASE (recomendado para base de datos nueva o vacía)

ALTER DATABASE nombre_base_datos 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

Método 2: Crear base de datos nueva con charset correcto

Si la base de datos ya tiene datos, es mejor crear una nueva y migrar:

CREATE DATABASE nombre_base_datos_nueva 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

Cambiar charset y collation de tablas existentes

Si necesitás cambiar tablas que ya tienen datos:

ALTER TABLE nombre_tabla 
CONVERT TO CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

Para cambiar todas las tablas de una base de datos:

SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') 
AS sql_statement 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'nombre_base_datos';

Copiá y ejecutá cada comando generado.


Cambiar charset y collation de columnas específicas

Para cambiar solo una columna:

ALTER TABLE nombre_tabla 
MODIFY nombre_columna VARCHAR(255) 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

Proceso completo para base de datos con datos existentes

1. Hacer backup completo

mysqldump -u root -p nombre_base_datos > backup.sql

2. Exportar datos

mysqldump -u root -p --default-character-set=utf8mb4 nombre_base_datos > datos.sql

3. Crear nueva base de datos con charset correcto

CREATE DATABASE nombre_base_datos_nueva 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

4. Importar datos

mysql -u root -p --default-character-set=utf8mb4 nombre_base_datos_nueva < datos.sql

5. Verificar y renombrar

-- Verificar que todo esté correcto
DROP DATABASE nombre_base_datos;
RENAME DATABASE nombre_base_datos_nueva TO nombre_base_datos;

Nota: En versiones recientes de MySQL, RENAME DATABASE puede no estar disponible. En ese caso, renombrá manualmente o recreá la base de datos original.


Cambiar charset por defecto para nuevas bases de datos

Para que todas las nuevas bases de datos usen utf8mb4 por defecto, editá el archivo de configuración:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Agregá en la sección [mysqld]:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

Reiniciá MySQL:

sudo systemctl restart mysql

Verificar cambios

Después de hacer los cambios, verificá:

-- Base de datos
SHOW CREATE DATABASE nombre_base_datos;

-- Tablas
SHOW CREATE TABLE nombre_tabla;

-- Columnas
SHOW FULL COLUMNS FROM nombre_tabla;

Problemas comunes

Error: "Incorrect string value"

  • Ocurre cuando intentás insertar caracteres que no son compatibles con el charset actual.
  • Solución: Cambiá el charset a utf8mb4.

Caracteres extraños o "?" en lugar de acentos

  • Generalmente es un problema de charset incorrecto en la conexión o en la base de datos.
  • Verificá que la conexión use utf8mb4 y que la base de datos también lo use.

Problemas de ordenamiento

  • Si las consultas ORDER BY no ordenan correctamente, puede ser un problema de collation.
  • Cambiá a una collation más apropiada para tu idioma.

Mejores prácticas

  • Usa utf8mb4: Es el estándar actual y soporta todos los caracteres Unicode.
  • Usa utf8mb4_unicode_ci: Para ordenamiento más preciso y compatible internacionalmente.
  • Configura al crear: Siempre especificá charset y collation al crear bases de datos y tablas.
  • Haz backups: Antes de cambiar charset en bases de datos con datos, hacé un backup completo.
  • Prueba primero: Probá los cambios en una copia de la base de datos antes de aplicarlos en producción.

¿Necesitás ayuda?

Si tenés problemas cambiando el charset o collation de tu base de datos, abrí un ticket desde el panel de billing.baires.host o contactanos por soporte.

También podés escribirnos por nuestras redes:

¿Fue útil la respuesta? 0 Los Usuarios han Encontrado Esto Útil (0 Votos)