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\\')
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.
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 :
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.
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 '|'
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!