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 ce problème 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, ce qui est insensible à la casse.
Solution alternative utilisant COLLATE :
Une Une autre approche 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;
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3