Как искать slash ( ) в MySQL? и почему требуется побег ( ) не для того, где ( = ), а для подобного?



Рассмотрим этот запрос (демо здесь)



(SELECT * FROM `titles` where title = 'test\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\')


Вывод:



| ID | TITLE |
--------------
| 1 | test |
| 1 | test |


Вопрос:



Почему нет дополнительных () требуется для (=) но для (вроде) дополнительных \ Требуется ли?
Его ясно, что MySQL избежал (test) с (test\) затем с помощью (test\\) логично для подобных.



Табличная информация:



CREATE TABLE IF NOT EXISTS `titles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Dumping data for table `titles`
--

INSERT INTO `titles` (`id`, `title`) VALUES
(1, 'test\');
549   4  

4 ответов:

\ по умолчанию функционирует как escape-символ в LIKE.

Из руководства для LIKE:

Поскольку MySQL использует синтаксис c escape в строках (например, "\n "для представления символа новой строки), вы должны удвоить любое"\", которое вы используете в подобных строках. Например, чтобы найти "\n", укажите его как"\\n". Чтобы найти"\", укажите его как"\\\\"; это происходит потому, что обратные косые черты удаляются один раз синтаксическим анализатором и снова, когда шаблон совпадает делается , оставляя одну обратную косую черту для сопоставления.

Это можно изменить, указав другой escape-символ, например:

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

На самом деле, все предыдущие ответы были где-то искажены. Как вы можете видеть в ссылке, предоставленной Кароли хорват, чей значащий бит воспроизводится таблетками взрыва, правильный способ поиска 1 обратной косой черты ( \ ) - использовать 4 обратных косых черты сразу (\\\\).

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

LIKE принимает два символа wildchar, % и _.

Чтобы соответствовать этим символам, можно использовать экранирование: \%, \_. Это также означает, что если вы хотите сопоставить \, он также должен быть экранирован.

Все это задокументировано в руководстве .

Для нахождения \ в текстовом поле мне пришлось дважды экранировать \, иначе % в конце был найден:

SELECT * FROM `table` where `field` LIKE '%\\\%';

Comments

    Ничего не найдено.