Maison  >  Article  >  base de données  >  Pourquoi mon opérateur MySQL LIKE est-il sensible à la casse même si ma table utilise utf8_general_ci ?

Pourquoi mon opérateur MySQL LIKE est-il sensible à la casse même si ma table utilise utf8_general_ci ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-08 19:30:02486parcourir

Why is my MySQL LIKE operator case-sensitive even though my table uses utf8_general_ci?

Comprendre la sensibilité à la casse dans MySQL

Votre requête MySQL utilisant l'opérateur LIKE semble présenter une sensibilité à la casse, bien que votre table soit codée en utf8_general_ci avec le moteur de stockage MyISAM. Ce comportement peut être déroutant, et comprendre la cause sous-jacente est crucial pour résoudre le problème.

Comparaison de chaînes binaires et non binaires :

La clé pour comprendre cela le comportement réside dans la distinction entre la comparaison de chaînes binaires et non binaires. Par défaut, MySQL effectue une comparaison de chaînes non binaires, qui est sensible à la casse pour la plupart des jeux de caractères, y compris utf8_general_ci.

Correction de la sensibilité à la casse avec la comparaison binaire :

Pour résoudre le problème de respect de la casse, vous pouvez modifier votre requête pour utiliser la comparaison de chaînes binaires. Ceci est réalisé en préfixant l'opérande de droite de l'opérateur LIKE avec le mot-clé BINARY. La requête corrigée ressemblerait à :

SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';

Cette modification oblige MySQL à utiliser la comparaison de chaînes binaires, qui n'est pas sensible à la casse.

Solution alternative utilisant COLLATE :

Une approche alternative pour réaliser une comparaison de chaînes insensible à la casse consiste à utiliser la clause COLLATE. La clause COLLATE spécifie le jeu de caractères et les règles de classement à appliquer à la comparaison de chaînes. En spécifiant le classement utf8_bin, vous pouvez forcer MySQL à utiliser la comparaison de chaînes binaires. La requête utilisant COLLATE serait :

SELECT ....
FROM ....
WHERE `concatenated` LIKE '%SearchTerm%' COLLATE utf8_bin;

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