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!