MySQL, Interclassement et Recherche
By Geoffrey on Tuesday 14 November 2006, 13:16 - Le saviez vous ? - Permalink
Sur une colonne en interclassement utf8_bin, une recherche de type LIKE sera case sensitive (sensible à la casse) par défaut (je n'ai pas cherché / trouvé de moyen d'inverser ce comportement). Alors que sur un interclassement utf8_unicode_ci, la recherche se fait en mode case insensitive (insensible à la casse), à moins d'employer la syntaxe LIKE BIN 'needle'.
Comments
On pourrai rajouter dans le même domaine le peu d'exactitude des recherches sur du texte en interclassement autre qu'UTF8 (un petit SELECT 'é' = 'e', 'e' = 'è', 'E' = 'é' vous en convaincra...)
Et en faisant un WHERE LOWER(champs) LIKE '%blabla%' ?
Bien essayé, mais ce serait trop facile :-) "blabla" est bien entendu en réalité
$_POST['blabla'](duement filtré, ça va de soi). Donc à la limiteWHERE LOWER(champs) LIKE '%'.strtolower($blabla).'%', mais bon, ça m'a surtout fait prendre conscience que j'avais le mauvais interclassement sur mes tables ;)Si ta table est définie avec l'interclassement utf8_bin, pour faire des recherches en ci (case insensitive), il faut changer l'interclassement dans la requête. Par exemple :
WHERE champs LIKE '%blabla%' COLLATE utf8_general_ci
Merci de l'info !
Ah ça oui, merci Grégoire !