Maison >base de données >tutoriel mysql >Pourquoi les requêtes MySQL LIKE sont-elles sensibles à la casse avec l'encodage utf8_general_ci ?

Pourquoi les requêtes MySQL LIKE sont-elles sensibles à la casse avec l'encodage utf8_general_ci ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 18:05:02412parcourir

Why are MySQL LIKE Queries Case-Sensitive with utf8_general_ci Encoding?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn