Magazine Informatique

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

Publié le 21 juin 2008 par Mr32

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 ;


Retour à La Une de Logo Paperblog

LES COMMENTAIRES (2)

Par maze
posté le 14 juin à 03:29
Signaler un abus

Salut, pour moi ça ne fonctionne pas... Table en latin1swedishci. Une idée ??!

Par MacManus
posté le 02 février à 20:27
Signaler un abus

ça marche parfaitement, merci !

A propos de l’auteur


Mr32 12 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog

Magazine