MySQL, Interclassement et Recherche
By Geoffrey on Tuesday 14 November 2006, 13:16 - Le saviez vous ? - Permalink
Tags :
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'.
6 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 !
This post's comments feed