Asselin Benoit Développement - Création et conception de sites internet - Amiens Somme Picardie Paris France

Requête MySQL insensible aux accents dans une table latin1 ( mysql, sql )
21`06`2008

14 commentairesPoster un commentaire !
Tags: MySQL UTF-8

Problème du jour : Vous avez une table en latin1_general_ci (ou un interclassement assez proche), et vous souhaitez effectuer une recherche sur le terme "cinéma" avec un LIKE.
Un problème va se poser si l'utilisateur saisit "cinema" et non "cinéma"... votre requête ne retournera aucun résultat...

SELECT * FROM `table` WHERE `texte` LIKE '%cinema%' ;


Une partie de la solution se trouve dans l'interclassement, si vous effectuez cette même requête LIKE dans une table en utf8_general_ci, le résultat retournera tous les "cinéma" !

Certains diront sûrement qu'il suffit de changer l'interclassement et le problème sera réglé mais parfois vous n'avez pas cette possibilité pour diverses raisons...
Voici une solution qui je l'espère vous plaira, il "suffit" de traiter le texte reçu en latin1 ISO-8859-1 dans la requête avec un CONVERT(_utf8 '%...%' USING utf8) COLLATE utf8_general_ci :

SELECT * FROM `table`
WHERE `texte` LIKE CONVERT(_utf8 '%cinema%' USING utf8) COLLATE utf8_general_ci ;


En promo : Comment réinitialiser le numéro identifiant AUTO_INCREMENT dans une table ?

ALTER TABLE `table` AUTO_INCREMENT = 1 ;