Mysql: Illegal mix of collations
Un errore che può capitare, quando si effettuano query su due db o due tabelle con una collations differente, è il seguente:
ERROR 1267 (HY000): Illegal mix of collations (latin1_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation ‘=’
Questo errore indica che i due campi su cui stiamo effettuando la query hanno una collations differente e non compatibile. Facciamo qualche esempio ecco la nostra tabella:
show create table a;
CREATE TABLE `a` (
`campo1` varchar(64) character set latin1 collate latin1_bin NOT NULL default ”
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |show create table b;
CREATE TABLE `b` (
`campo2` varchar(255) NOT NULL default ”
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
La tabella b non avendo alcuna collations impostata, prenderà quella di default, ovvero:
collate latin1_general_ci
Ora se andiamo a fare una query che preleva i dati da entrambe le tabelle, otterremo il seguente errore:
SELECT * FROM a,b WHERE campo1 = campo2;
ERROR 1267 (HY000): Illegal mix of collations (latin1_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation ‘=’
Ora per risolvere il problema forziamo la collate latin1_bin in latin1_general_ci:
ALTER TABLE a character set latin1 collate latin1_general_ci , modify column campo1 varchar(64) character set latin1 collate latin1_general_ci NOT NULL;
A questo punto lo show create table ci mostrerà la nuova collate impostata per il campo campo1 e la query che prima ci restituiva l’errore ora sarà eseguita correttamente.


Nelle distribuzioni linux il servizio MySQL e’ configurato di default per non accettare connessioni da host esterni. Ma come fare per abilitare la connessione da remoto? La procedura e’ molto semplice ed proposta di seguito: