Collation en MySQL con PHP: tutorial completo y mejores prácticas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿por qué la collation en MySQL no es un simple capricho estético?

\n

Cualquiera que haya configurado una base de datos para un proyecto en PHP se ha enfrentado a la pregunta: «¿Qué collation (comparación/ordenamiento) elijo?». En Stack Overflow, esta pregunta acumula miles de visitas y las respuestas suelen confundir a los principiantes. A simple vista, parece que no hay diferencia — con tal de que funcione. Pero la realidad es que la elección de la collation afecta la velocidad de búsqueda, la precisión del ordenamiento (especialmente con el español) e incluso cómo se muestran los caracteres especiales.

\n

En este tutorial, analizaremos cuál es la mejor collation para MySQL con PHP en 2025 y por qué. Aprenderás a evitar errores clásicos y a configurar tu base de datos para que tu web vuele y los datos no se conviertan en caracteres extraños.

\n\n

¿Qué es collation en términos sencillos?

\n

Collation es un conjunto de reglas que MySQL utiliza para comparar y ordenar cadenas de texto. Está estrechamente relacionada con el charset (codificación). Mientras que la codificación (por ejemplo, utf8mb4) define cómo se almacenan los caracteres, la collation determina cómo se comparan: si se distingue entre mayúsculas y minúsculas, cómo ordenar las letras «ñ» y «n», o si «A» y «a» se consideran iguales.

\n

Los tipos principales de collation para utf8mb4 son:

\n
    \n
  • utf8mb4_general_ci — antigua, rápida, pero con un ordenamiento simplificado (no siempre maneja correctamente algunos idiomas).
  • \n
  • utf8mb4_unicode_ci — más precisa, basada en el estándar Unicode, aunque antes de MySQL 8.0 era más lenta.
  • \n
  • utf8mb4_0900_ai_ci — la más moderna (MySQL 8.0+), la más precisa y rápida al mismo tiempo.
  • \n
\n\n

¿Por qué no deberías usar collations antiguas?

\n

Muchos proyectos heredados todavía usan utf8_general_ci o incluso latin1_swedish_ci. Si estás creando un proyecto nuevo en PHP, evítalas como si fueran fuego. He aquí por qué:

\n
    \n
  • Problemas con el español: la «ñ» y la «n» pueden ordenarse incorrectamente.
  • \n
  • Conjunto de caracteres limitado: las codificaciones antiguas no soportan emojis ni caracteres poco comunes.
  • \n
  • Rendimiento: las collations modernas están optimizadas y funcionan más rápido.
  • \n
\n\n

La mejor collation en 2025: utf8mb4_0900_ai_ci

\n

Si tu MySQL es versión 8.0 o superior (como la mayoría hoy en día), la mejor opción es utf8mb4_0900_ai_ci. Desglose:

\n
    \n
  • utf8mb4 — codificación que soporta 4 bytes por carácter (emojis, jeroglíficos raros).
  • \n
  • 0900 — basada en el estándar Unicode 9.0 (la versión más actualizada).
  • \n
  • ai — accent insensitive (insensible a acentos: «café» y «cafe» son iguales).
  • \n
  • ci — case insensitive (insensible a mayúsculas: «Hola» y «hola» son iguales).
  • \n
\n

Esta collation ofrece la máxima precisión y velocidad. Si necesitas distinguir entre mayúsculas/minúsculas o acentos, usa utf8mb4_0900_as_cs, pero para el 99% de los proyectos web, ai_ci es la opción ideal.

\n\n

¿Y si tengo MySQL 5.7 o inferior?

\n

En ese caso, tu mejor opción es utf8mb4_unicode_520_ci (o simplemente utf8mb4_unicode_ci). No es tan rápida como la 0900, pero es mucho más precisa que general_ci. Si tienes una versión antigua, actualiza cuanto antes, pero mientras tanto, usa utf8mb4_unicode_ci.

\n\n

Tutorial paso a paso: configuración de collation en un proyecto PHP

\n

Vamos a configurar la base de datos correctamente. Te lo mostraré con PDO, la forma moderna y segura de trabajar con MySQL en PHP.

\n\n

Paso 1. Crear la base de datos con la collation correcta

\n

Ejecuta esta consulta SQL (a través de phpMyAdmin o la consola):

\n
CREATE DATABASE mi_base_de_datos\n    CHARACTER SET utf8mb4\n    COLLATE utf8mb4_0900_ai_ci;
\n\n

Paso 2. Configurar la conexión en PHP (PDO)

\n

Al conectarte a la base de datos, asegúrate de especificar la codificación en el DSN:

\n
<?php\n$dsn = 'mysql:host=localhost;dbname=mi_base_de_datos;charset=utf8mb4';\n$usuario = 'tu_usuario';\n$contraseña = 'tu_contraseña';\n\n$opciones = [\n    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n];\n\ntry {\n    $pdo = new PDO($dsn, $usuario, $contraseña, $opciones);\n} catch (PDOException $e) {\n    echo 'Error de conexión: ' . $e->getMessage();\n}\n?>
\n\n

Paso 3. Verificar la collation de las tablas existentes

\n

Si ya tienes tablas creadas, puedes comprobar su collation con esta consulta:

\n
SHOW TABLE STATUS WHERE Name = 'tu_tabla';
\n

Si la collation no es la correcta, puedes cambiarla con:

\n
ALTER TABLE tu_tabla CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
\n\n

Conclusión: resumen y recomendaciones finales

\n

Elegir la collation adecuada en MySQL es una decisión técnica que impacta directamente en el rendimiento y la precisión de tu aplicación. Para proyectos nuevos con MySQL 8.0+, utf8mb4_0900_ai_ci es la opción ganadora. Si trabajas con versiones anteriores, utf8mb4_unicode_ci es una alternativa sólida. Recuerda siempre configurar tanto la base de datos como la conexión PDO con utf8mb4 para evitar problemas de codificación. ¡Tu web (y tus usuarios) te lo agradecerán!

Blogs

Book Recommendations