Bonjour à Tous,
Je sais bien que le sujet a été maintes fois évoqué un peu partout, mais je n'ai pas trouvé de réponse satisfaisante à ma question :
Ma base SQL est en interclassement utf8_general_ci.
La table sur laquelle je travaille à mon moteur de recherche est MyISAM est interclassement utf8_general_ci.
Les pages PHP qui gèrent l'ensemble sont en charset=utf8.
Quelqu'un peut-il m'expliquer pourquoi, lorsque je fais une bête requête INSERT via un formulaire, tous les mots accentués sont encodés utf8 ? Ce qui donne, côté phpMyAdmin, "bénévole" quand on saisit le mot "bénévole"...Je précise que; au traitement de la requête, je n'utilise pas la fonction utf8_encode.
Côté affichage site, tout est parfait sans aucun traitement, MAIS :
Voici 2 requêtes affichées par mon script de moteur de recherche pour le mot "bénévole" :
1- En faisant un utf8_encode sur le mot-clé à la sortie du form :
SELECT * FROM table WHERE MATCH (nom) AGAINST(CONVERT(_utf8 'bã©nã©vole' USING utf8) IN BOOLEAN MODE)
Ca matche. Par contre, avec le mot-clé "benevole" : nada.
2- Sans encodage utf8 du mot-clé :
SELECT * FROM table WHERE MATCH (nom) AGAINST(CONVERT(_utf8 'bénévole' USING utf8) IN BOOLEAN MODE)
Rien. Et pas plus avec "benevole".
Je précise que le champ "nom" possède bien un index fulltext.
Du coup je ne sais pas si je dois modifier toute ma table et transformer tous les caractères utf8 en clair...ce que je ne sais pas forcément faire, et qui pourrirait l'affichage site, sachant qu'en plus je devrais modifier toutes mes requêtes INSERT pour que les accents s'écrivent en clair.
Ou si je dois modifier ma requête de recherche de mon moteur ? J'ai tente avec regexp :
SELECT * FROM jld_produits WHERE (nom REGEXP CONVERT(_utf8 'bénévole' USING utf8) )
Que dalle, avec ou sans encodage mot-clé, avec ou sans accent. La mouise.
Bref, je veux bien vos conseils avisés...car mon but est que le moteur matche systématiquement, que l'on saisisse "benevole", "bénévole", "benévole" etc...
D'avance merci.
Partager