Maison > base de données > tutoriel mysql > Pourquoi MySQL nécessite-t-il un échappement de barre oblique inverse pour LIKE mais pas pour = ?

Pourquoi MySQL nécessite-t-il un échappement de barre oblique inverse pour LIKE mais pas pour = ?

Mary-Kate Olsen
Libérer: 2025-01-06 21:04:41
original
927 Les gens l'ont consulté

Why Does MySQL Require Backslash Escaping for LIKE but Not for =?

Échapper à la barre oblique inverse dans MySQL : découvrir les différences entre les opérateurs Equal (=) et LIKE

Dans MySQL, la barre oblique inverse () joue un rôle crucial dans la manipulation des chaînes. Lorsque vous utilisez l'opérateur égal (=), l'échappement de la barre oblique inverse n'est pas nécessaire, contrairement à l'opérateur LIKE, où une barre oblique inverse supplémentaire est requise.

Considérez la requête suivante :

(SELECT * FROM `titles` WHERE title = 'test\')
UNION ALL
(SELECT * FROM `titles` WHERE title LIKE 'test\\')
Copier après la connexion

La sortie de cette requête révèle que les deux conditions correspondent et renvoient la même ligne. Cela peut sembler contre-intuitif puisque la deuxième condition contient une barre oblique inverse supplémentaire.

Pourquoi l'échappement n'est-il pas requis pour (=) mais est requis pour LIKE ?

Le La réponse réside dans le comportement unique de l'opérateur LIKE. Contrairement à l'opérateur égal (=), LIKE utilise des barres obliques inverses comme caractères d'échappement. Cela signifie que toute barre oblique inverse dans un modèle LIKE doit être doublée pour correspondre littéralement.

MySQL effectue ce doublement en deux étapes :

  • Une fois par l'analyseur, qui supprime une barre oblique inverse.
  • Encore une fois, lorsque la correspondance de motif est effectuée, en laissant une seule barre oblique inverse à faire correspondre au string.

Par conséquent, dans la première condition (title = 'test'), MySQL échappe automatiquement à la barre oblique inverse, ce qui entraîne une correspondance. Cependant, dans la deuxième condition (titre LIKE 'test\'), la barre oblique inverse supplémentaire est nécessaire car elle compense les deux tours de suppression de la barre oblique inverse.

Caractère d'échappement personnalisé pour les modèles LIKE

Dans certains scénarios, il peut être souhaitable d'utiliser un caractère d'échappement différent pour les modèles LIKE. Ceci peut être réalisé à l'aide du mot-clé ESCAPE, comme indiqué ci-dessous :

SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
Copier après la connexion

En spécifiant le mot-clé ESCAPE, le '|' Le caractère devient le caractère d'échappement au lieu du '' par défaut. Cela vous permet d'utiliser littéralement le caractère barre oblique inverse dans les modèles LIKE sans avoir à le doubler.

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!

source:php.cn
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