MySQL - Problemas con juegos de caracteres. Illegal mix of collations

Autoría: Daniel Ibáñez

En MySQL, el juego de caracteres con el que definimos cada una de nuestras tablas es algo que, en primera instancia, podemos considerar trivial. Pero, una vez tenemos definido un juego de tablas, es posible que este aspecto nos cree más de un quebradero de cabeza.

En este artículo, vamos a observar cómo en una consulta que, sintácticamente es correcta, puede producir un error debido a un pequeño despiste en la definición de la tabla.

Así, en nuestro script PHP, disponemos de las siguientes tablas:

Con esta definición de tablas, una consulta que, analizada sintácticamente es correcta como

<?php

//CODIGO PREVIO

$result=mysql_query("
SELECT `NOMBRE`
FROM `AMIGAS`
UNION
SELECT `NOMBRE`
FROM `AMIGOS`;
");

//CODIGO POSTERIOR

?>

puede producirnos un error

 

#1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) 
and (utf8_general_ci,COERCIBLE) for operation 'UNION'


Sintácticamente, la consulta es correcta. Sin embargo, el motor de MySQL encuentra un problema al intentar comparar dos cadenas codificadas con diferente juego de caracteres.

Para solucionar este engorroso problema, la solución es especificarle a MySQL que utilice un juego de caracteres, independientemente del establecido para cada una de las tablas.

En PHP, puede traducirse en algo tan sencillo como:

<?php

//CODIGO PREVIO

@mysql_query("SET collation_connection = latin1_spanish_ci;");

$result=mysql_query("
SELECT `NOMBRE`
FROM `AMIGAS`
UNION
SELECT `NOMBRE`
FROM `AMIGOS`;
");

//CODIGO POSTERIOR

?>

De esta forma, con la sentencia

@mysql_query("SET collation_connection = latin1_spanish_ci;");

indicamos al servidor MySQL que utilice el juego de caracteres latin1_spanish_ci como juego de caracteres de la conexión, evitándo así que MySQL no sepa interpretar la unión de los tipos de datos.


Echa un vistazo a otros trucos en MySQL y aprende a calcular la edad a partir de la fecha de nacimiento o a gestionar bases de datos relacionales con MySQL.

Sigue al día con nuestra newsletter

Indícanos los temas que más te interesan:

Política de privacidad

ADR Formación utiliza cookies propias y de terceros para fines analíticos anónimos, guardar las preferencias que selecciones y para el funcionamiento general de la página.

Puedes aceptar todas las cookies pulsando el botón "Aceptar" o configurarlas o rechazar su uso pulsando el botón "Configurar".

Puedes obtener más información y volver a configurar tus preferencias en cualquier momento en la Política de cookies