2011-09-10 2 views
4
$q = $this->createQuery('q') 
->where('q.group_id=?', $group_id) 
->andWhere('q.content=?', $content) 
    ->execute(); 

Si le contenu de mon $ contient des caractères unicode (par exemple chinois/japonais) ce qui provoque le message suivant:MySQL requête utf-8 caractères (par exemple chinois) (Aussi, je me sers Doctrine)

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations 
(latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' 

Quelqu'un a déjà rencontré un problème similaire?

Répondre

1

Vous pouvez utiliser la fonction COLLATE avec MySQL dans la clause where, devra convertir les données entrantes à la collecte de la colonne (latin1_swedish_ci)

$q = $this->createQuery('q') 
->where('q.group_id=?', $group_id) 
->andWhere('q.content = _latin1 ? COLLATE latin1_swedish_ci', $content) 
    ->execute(); 

Pour plus de détails sur la fonction d'assemblage, vous pouvez jeter un oeil à http://dev.mysql.com/doc/refman/5.6/en/charset-collate.html qui a les détails, cela a été dans mysql de 4.1.

Vous pouvez également définir le classement par colonne dans la définition de la structure de la table (voir http://dev.mysql.com/doc/refman/5.6/en/charset-column.html) pour plus de détails.

Espérons que cela aide.

Questions connexes