Home > MySQL > Mysql: Illegal mix of collations

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.

  1. Nessun commento ancora...
  1. Nessun trackback ancora...