Maison >base de données >tutoriel mysql >Pourquoi les requêtes MySQL LIKE sont-elles sensibles à la casse avec l'encodage utf8_general_ci ?
Sensibilité à la casse dans les requêtes MySQL LIKE
Problème :
Considérez la requête MySQL suivante :
SELECT concat_ws(title, description) as concatenated HAVING concatenated LIKE '%SearchTerm%';
Malgré l'utilisation de l'opérateur LIKE, les recherches semblent être le cas sensible lorsque l'encodage de la table est utf8_general_ci avec un moteur de stockage MyISAM.
Explication :
Le moteur de stockage MyISAM utilise des comparaisons insensibles à la casse pour les chaînes stockées dans l'encodage utf8_general_ci. Cependant, l'opérateur LIKE effectue des comparaisons sensibles à la casse par défaut.
Solution optimale :
Pour effectuer des comparaisons non sensibles à la casse, utilisez le mot-clé BINARY comme suit :
SELECT .... FROM .... WHERE `concatenated` LIKE BINARY '%SearchTerm%';
Les comparaisons de chaînes deviennent sensibles à la casse lorsque l'un des opérandes est un binaire string.
Solution alternative :
Vous pouvez également utiliser l'instruction COLLATE pour spécifier un classement spécifique aux paramètres régionaux :
SELECT .... FROM .... WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;
Cette approche permet comparaisons insensibles à la casse tout en conservant le codage des caractères d'origine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!