«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему MySQL требует двойной обратной косой черты для экранирования обратной косой черты в запросах LIKE, но не в запросах Equals (=)?

Почему MySQL требует двойной обратной косой черты для экранирования обратной косой черты в запросах LIKE, но не в запросах Equals (=)?

Опубликовано 1 ноября 2024 г.
Просматривать:678

Why Does MySQL Require Double Backslashes to Escape a Backslash in LIKE Queries But Not in Equals (=) Queries?

Что такое экранирование косой черты MySQL () в запросах

В MySQL принято экранировать специальные символы, включая обратную косую черту (), в запросах, чтобы предотвратить конфликты интерпретации. Однако при сравнении поведения операторов равенства (=) и LIKE в отношении обратной косой черты возникает любопытная аномалия.

Оператор равенства (=)

В случае оператора равенства дополнительная обратная косая черта не требуется, чтобы избежать обратной косой черты внутри условия поиска. Например, следующий запрос извлекает строку, в которой столбец заголовка содержит значение «test».

SELECT * FROM `titles` WHERE title = 'test\';

Парсер MySQL автоматически интерпретирует обратную косую черту в поисковом запросе как буквальный символ, что обеспечивает успешный поиск.

Оператор LIKE

В отличие от оператора равенства, оператор LIKE требует дополнительная обратная косая черта, чтобы избежать обратной косой черты в поисковом запросе. Это связано с тем, что оператор LIKE выполняет сопоставление с шаблоном, а обратная косая черта по умолчанию действует в SQL как escape-символ. Таким образом, следующий запрос возвращает ту же строку, что и предыдущий:

SELECT * FROM `titles` WHERE title LIKE 'test\\\\';

В этом запросе двойная обратная косая черта убедитесь, что одиночная обратная косая черта в поисковом запросе интерпретируется буквально как символ обратной косой черты.

Объяснение

Причина такого поведения кроется в том, как MySQL обрабатывает шаблоны LIKE. . Синтаксический анализатор первоначально удаляет обратную косую черту из поискового запроса. Однако при последующем сопоставлении с образцом обратная косая черта снова удаляется. Это оставляет одну обратную косую черту, которая будет сопоставляться с шаблоном. Чтобы гарантировать, что обратная косая черта воспринимается как буквальный символ, требуется дополнительная обратная косая черта.

Изменение escape-символа

MySQL позволяет указать другой escape-символ для шаблонов LIKE с использованием предложения ESCAPE. Например, в следующем запросе в качестве escape-символа используется символ вертикальной черты (|):

SELECT * FROM `titles` WHERE title LIKE 'test\\' ESCAPE '|';

In В этом примере одиночная обратная косая черта в поисковом запросе интерпретируется буквально, поскольку ей предшествует указанный escape-символ.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3