Bonjour,
Je galère sur la réalisation d'une requête ne prenant en compte ni les accents, ni les majuscules/minuscules. Pour faire simple, une recherche sur le mot "intérêt" doit pouvoir me renvoyer les Posts comprenant "Interet" ou "Intéret" ou "intérêt" ...
J'ai évidemment fait déjà plusieurs recherches sur le net qui propose une solution via l'attribut "collate 'Latin1_General_CI_AI'" ; mais impossible de le mettre en oeuvre...

J'ai nottament essayé :

        $this->Paginator->settings = array(
            'contain' => array('Category','Tag'),
            'conditions' => "Post.name LIKE " . $data['search'],
            'joins' => $joins,
            'limit' => 10,
            'collate'=>'Latin1_General_CI_AI'
        );
        $manifs = $this->Paginator->paginate( 'Manif' );

Merci d'avance pour votre aide !

2 réponses


Huggy
Réponse acceptée

Bonjour eraph,
je ne pense pas qu'il existe de collation latin1 accent insensitive, parcontre il y a la collation utf8_general_ci
Le pb c'est qu'il y a incompatibilité avec des données en latin1, il faut donc les convertir en utf8

'conditions' => "CONVERT(Post.name USING utf8)  COLLATE utf8_general_ci LIKE " . $data['search'],

il y a un autre soucis, c'est que Mysql ne saura pas utiliser les index pour une telle requête, à cause de la convertion

eRaph
Auteur

Super, ça marche impec !! Un grand merci !