8710 sujets

Développement web côté serveur, CMS

Bonjour,

un petit soucis, j'ai une bdd sql en utf8_general_ci, et lorsque que je fais une recherche dans ma base via un formulaire je n'arrive pas à rendre la recherche insensible aux accents.
ex : si je cherche la chaîne "cafe", j'aimerai avoir en résultats "café" et "cafe". (requête de type LIKE)

J'ai exploré l'utilisation de COLLATE dans une requête SQL, mais sans résultats positifs malgré les nombreux exemples.

J'ai ensuite regarder du côté des indexations en passant ma base en myisam plutôt que innodb, et en utilisant des requêtes de type MATCH AGAINST, mais je ne pense pas que c'était une bonne piste.

Cela me paraît démentiel de buter sur ce genre de problème, si quelqu'un peut m'aiguiller svp...

Merci bcp
Modifié par Pedrothelion (17 Sep 2014 - 10:01)
Il suffisait que je crée un post pour trouver la solution...

donc, si cela vous intéresse, pour éviter ce genre de problème avec php et une bdd sql :

1 -Définir le charset du serveur sql en utf8. Par exemple dans votre fichier de config :

$link = mysql_connect($bdd_host,$bdd_user,$bdd_password) or die (mysql_error());
mysql_set_charset('utf8',$link);


Puis choisir l'interclassement ut8_unicode_ci lors de la création de votre bdd, les tables et ses champs seront par défaut en utf8_unicode_ci à leur création.

Du coup, une recherche avec une requête sql de type LIKE devient insensible aux accents et à la casse.

C'est formidable... sauf que maintenant mon serveur local était en latin1, quand je modifie le charset du serveur, mes chaînes de caractères avec accents s'affichent avec des caractères spéciaux... normal.

Bref, ca fonctionne.