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
Libérer: 2024-11-09 18:05:02
original
455 Les gens l'ont consulté

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%';
Copier après la connexion

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%';
Copier après la connexion

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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal