Guía y comprobaciones
Revisa toda la cadena
Ver España no demuestra que la base de datos sea el origen del problema. El texto puede estar ya alterado antes de insertarse o interpretarse mal al mostrarse. Anota el valor original, el almacenado y el que entrega la respuesta, sin registrar datos personales reales.
En MySQL, utiliza un juego de caracteres que cubra el texto que necesitas. utf8mb4 permite caracteres de cuatro bytes; no asumas que toda referencia histórica a utf8 significa lo mismo.
La conexión PDO
La selección del juego de caracteres forma parte de la conexión. Este fragmento necesita un servidor y credenciales propios; no incluye una contraseña de ejemplo que debas reutilizar.
$pdo = new PDO(
'mysql:host=localhost;dbname=ejercicios;charset=utf8mb4',
getenv('DB_USER'),
getenv('DB_PASSWORD'),
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$consulta = $pdo->prepare('SELECT nombre FROM personas WHERE id = :id');
$consulta->execute(['id' => 7]);
El DSN no transforma por sí solo columnas existentes ni repara valores ya dañados. Antes de cambiar una tabla, conserva una copia y confirma su juego de caracteres y colación. La colación afecta a ordenación e igualdad; no es simplemente una etiqueta decorativa para los acentos.
No conviertas dos veces
Aplicar funciones de conversión a cualquier texto puede producir una segunda corrupción. Si ya tienes UTF-8 válido, mantén esa codificación hasta la respuesta. Una página HTML debe declarar su codificación y escapar los valores que inserta; una API debe emitir JSON válido con su tipo de contenido correspondiente.
Para una prueba pequeña, utiliza España, pingüino, € y 😀. Comprueba la ida y vuelta completa con una fila de ejercicios y una consulta parametrizada. Si sólo falla el emoji, revisa especialmente la capacidad del campo y la conexión. Si los bytes guardados ya representan texto alterado, investiga el punto de entrada antes de hacer una sustitución masiva de datos.
Una reparación es una operación aparte
No ejecutes una conversión global de producción basándote sólo en cómo se ve un navegador. Dos filas pueden tener historiales distintos. Identifica el patrón, ensaya sobre una copia y compara antes y después; el ejemplo de conexión no autoriza una migración de datos.
Preguntas frecuentes
¿charset=utf8mb4 cambia automáticamente las columnas?
No. Configura la comunicación de esa conexión; la estructura y el contenido existentes requieren una revisión separada.
¿Debo usar una conversión en cada echo?
No. Mantén una codificación coherente y escapa según el contexto de salida; convertir reiteradamente puede alterar datos válidos.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.