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 ;

Comment supprimer les problèmes UTF-8 avec MySQL et PHP ?
23`11`2007

Aucun commentairePoster un commentaire !
Tags: MySQL UTF-8 PHP

Il faut spécifier dans les scripts PHP que les données transmises sont en UTF-8.

...

// avec MySQLi
mysqli_query($link, "SET NAMES 'utf8' ");

// ancienne méthode
mysql_query("SET NAMES 'utf8' ");

...