Échappement des signes de pourcentage littéral dans le mode MySQL NO_BACKSLASH_ESCAPES
Dans MySQL, lorsque le mode NO_BACKSLASH_ESCAPES est activé, la barre oblique inverse () standard d'échappement est désactivé. Cela peut poser un défi lorsque vous tentez d'échapper des caractères de pourcentage littéral (%) ou de trait de soulignement (_) dans les requêtes LIKE.
La méthode conventionnelle d'échappement d'un signe de pourcentage, en utilisant %, devient inefficace en mode NO_BACKSLASH_ESCAPES. Comme illustré dans la requête fournie :
SELECT * FROM mytable WHERE mycol LIKE '5\% off'
...cette requête ne parviendra pas à renvoyer le résultat souhaité lorsque le mode NO_BACKSLASH_ESCAPES est activé.
Solution avec caractère d'échappement
Pour échapper à un signe de pourcentage littéral en mode NO_BACKSLASH_ESCAPES, vous devez utiliser un caractère d'échappement. Le caractère d'échappement précise que le caractère suivant doit être interprété littéralement, et non comme un caractère spécial.
Dans MySQL, le caractère d'échappement peut être n'importe quel caractère non alphanumérique. Par exemple, utilisons le caractère barre oblique inverse () comme caractère d'échappement :
select * from mytable where mycol like '5\% off' escape '\';
Dans cette requête, la barre oblique inverse précédant le signe de pourcentage indique que le signe de pourcentage doit être traité comme un caractère littéral et non comme un caractère générique. .
Solution alternative avec un caractère d'échappement différent
Pour assurer la compatibilité avec les deux En mode NO_BACKSLASH_ESCAPES et en mode standard, vous pouvez utiliser un caractère différent comme caractère d'échappement. Cela permet à la requête de fonctionner quel que soit le paramètre de mode.
Par exemple, utilisons le caractère barre verticale (|) comme caractère d'échappement :
select * from mytable where mycol like '5|% off' escape '|';
Dans ce cas, le caractère barre verticale précédant le signe de pourcentage sert de caractère d'échappement, permettant à la requête de s'exécuter avec succès en mode standard et en mode NO_BACKSLASH_ESCAPES.
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!