Selección de codificación MySQL para PHP: tutorial con solución

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é sigue siendo relevante la cuestión de la intercalación en MySQL?



Si alguna vez te has enfrentado a la tarea de configurar una base de datos MySQL para una aplicación PHP, probablemente hayas visto términos misteriosos como utf8mb4_general_ci o latin1_swedish_ci en phpMyAdmin o archivos de configuración. La pregunta "¿Cuál es la mejor intercalación para usar en MySQL con PHP?" es una de las más populares en Stack Overflow, y con razón.



Elegir la codificación incorrecta puede hacer que las letras rusas se conviertan en caracteres ilegibles, que la ordenación de datos se rompa y que los emojis (sí, esos smileys) simplemente dejen de guardarse en la base de datos. En este tutorial, descubriremos de una vez por todas qué intercalación elegir para un proyecto PHP moderno, y te mostraré el código de configuración paso a paso.



¿Qué es la intercalación en MySQL y por qué es importante para PHP?



La intercalación es un conjunto de reglas mediante las cuales MySQL compara cadenas. Determina:



  • Insensibilidad a mayúsculas/minúsculas — si 'A' será igual a 'a' durante una búsqueda.
  • Orden de clasificación — cómo se organizarán las cadenas en los resultados de las consultas.
  • Soporte de caracteres — qué caracteres específicos (incluyendo cirílico, jeroglíficos, emojis) se pueden almacenar.


Esto es críticamente importante para un desarrollador PHP porque:

  • Trabajas con entrada de usuario (formularios, comentarios, publicaciones).
  • Las aplicaciones modernas deben soportar Unicode (emojis, caracteres especiales).
  • Una intercalación incorrecta rompe la comparación de cadenas en las condiciones WHERE.


Tipos principales de intercalación: desglose de opciones populares



1. utf8_general_ci — el antiguo estándar confiable

Durante mucho tiempo, este fue el estándar de facto. Es rápido, pero tiene un grave inconveniente: no soporta caracteres fuera del Plano Básico Multilingüe (BMP). Esto significa que los emojis 🚀, los caracteres de idiomas antiguos y los jeroglíficos chinos raros no se guardarán. Además, las reglas de comparación están simplificadas (por ejemplo, 'ß' puede no coincidir con 'ss' como en alemán).



2. utf8mb4_general_ci — una versión mejorada

Aquí, mb4 significa "multibyte 4" — soporte para caracteres de 4 bytes. Esto ya resuelve el problema de los emojis. Sin embargo, las reglas de comparación siguen simplificadas. Si la precisión lingüística no es importante para ti (por ejemplo, para un blog normal), esta es una excelente opción.



3. utf8mb4_unicode_ci — el estándar de oro (mi elección)

Esta es la mejor intercalación para la mayoría de los proyectos PHP modernos. Utiliza el Algoritmo de Intercalación Unicode (UCA), que:

  • Maneja correctamente los idiomas cirílico, latino y asiáticos.
  • Ordena las cadenas alfabéticamente correctamente (por ejemplo, 'ё' y 'е' estarán una al lado de la otra, no en lugares diferentes).
  • Soporta emojis y todos los caracteres Unicode.

El único inconveniente es que es ligeramente más lento que general_ci, pero en el 99% de los casos la diferencia es imperceptible.



4. utf8mb4_unicode_520_ci y utf8mb4_0900_ai_ci — las versiones más recientes

Opciones mejoradas aparecieron en MySQL 8.0. utf8mb4_0900_ai_ci es el estándar más moderno basado en Unicode 9.0. Es aún más preciso, pero requiere MySQL 8.0+. Si tu hosting lo soporta, úsalo. Para versiones anteriores (MySQL 5.7 e inferiores), usa utf8mb4_unicode_ci.



Tutorial paso a paso: configurar la intercalación para un proyecto PHP



Pasemos a la práctica. Te mostraré cómo configurar correctamente una conexión MySQL para que tu aplicación PHP funcione con utf8mb4_unicode_ci.



Paso 1: Elegir la codificación para la base de datos y las tablas

Crea una base de datos con una especificación de codificación explícita. Puedes hacerlo mediante SQL o phpMyAdmin:



CREATE DATABASE my_database    CHARACTER

Blogs

Book Recommendations