В MySQL принято экранировать специальные символы, включая обратную косую черту (), в запросах, чтобы предотвратить конфликты интерпретации. Однако при сравнении поведения операторов равенства (=) и LIKE в отношении обратной косой черты возникает любопытная аномалия.
В случае оператора равенства дополнительная обратная косая черта не требуется, чтобы избежать обратной косой черты внутри условия поиска. Например, следующий запрос извлекает строку, в которой столбец заголовка содержит значение «test».
SELECT * FROM `titles` WHERE title = 'test\';
Парсер MySQL автоматически интерпретирует обратную косую черту в поисковом запросе как буквальный символ, что обеспечивает успешный поиск.
В отличие от оператора равенства, оператор LIKE требует дополнительная обратная косая черта, чтобы избежать обратной косой черты в поисковом запросе. Это связано с тем, что оператор LIKE выполняет сопоставление с шаблоном, а обратная косая черта по умолчанию действует в SQL как escape-символ. Таким образом, следующий запрос возвращает ту же строку, что и предыдущий:
SELECT * FROM `titles` WHERE title LIKE 'test\\\\';
В этом запросе двойная обратная косая черта убедитесь, что одиночная обратная косая черта в поисковом запросе интерпретируется буквально как символ обратной косой черты.
Причина такого поведения кроется в том, как MySQL обрабатывает шаблоны LIKE. . Синтаксический анализатор первоначально удаляет обратную косую черту из поискового запроса. Однако при последующем сопоставлении с образцом обратная косая черта снова удаляется. Это оставляет одну обратную косую черту, которая будет сопоставляться с шаблоном. Чтобы гарантировать, что обратная косая черта воспринимается как буквальный символ, требуется дополнительная обратная косая черта.
MySQL позволяет указать другой escape-символ для шаблонов LIKE с использованием предложения ESCAPE. Например, в следующем запросе в качестве escape-символа используется символ вертикальной черты (|):
SELECT * FROM `titles` WHERE title LIKE 'test\\' ESCAPE '|';
In В этом примере одиночная обратная косая черта в поисковом запросе интерпретируется буквально, поскольку ей предшествует указанный escape-символ.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3