2009-09-21 6 views
1

J'essaie d'implémenter une fonctionnalité de recherche web sur une base de données MySQL en utilisant DBIx::Class::Resultset. Je l'ai travailler à part un problème: lors de la recherche de «ü» la recherche est effectuée par MySQL comme «u» (en d'autres termes, sans le tréma). La même chose est faite pour les autres caractères 'ASCII étendus'. La table et la connexion sont en UTF8.Comment obtenir DBIx :: Class pour assembler avec UTF-8?

je l'ai fait quelques tests sur la base de données et trouvé la solution: ajouter 'collationner utf8_bin la clause where, comme dans:

SELECT name FROM my_table WHERE name LIKE '%ü%' COLLATE utf8_bin; 

Mais comment puis-je mettre en œuvre cela avec DBIx :: Class? Ma recherche fait un 'WHERE ... LIKE' sur deux tables dans la requête.

Merci à l'avance,

Mauritz

+0

Je ne connais pas un moyen de le faire dans DBIx :: Class, mais peut-être un meilleur moyen serait de spécifier le classement par défaut dans la configuration de MySQL. Voir http://dev.mysql.com/doc/refman/5.0/fr/charset-database.html – friedo

+0

Salut Friedo, merci pour le commentaire. Je crois que c'est la meilleure solution, c'est-à-dire mettre à jour le classement par défaut des colonnes pertinentes. –

Répondre

3
$rs->search({ 
    name => \'LIKE ? COLLATE utf8_bin' 
    }, { 
    bind => [ '%' . $search_key . '%' ] 
    } 
); 

peut-être?

Questions connexes