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


Рассмотрим этот ЗАПРОС ( ДЕМОНСТРАЦИЯ ЗДЕСЬ)

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

Вывод:

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

ВОПРОС:

Почему нет дополнительных (\) требуется для (=) но для (например) дополнительных \\ требуется ли это? Ясно, что MySQL избежал (тест\) с помощью (тест\\), а затем с помощью (тест\\\\) логично для ПОДОБНОГО.

Информация о таблице:

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\\');
Author: LSerni, 2013-02-18

4 answers

\ по умолчанию используется как escape-символ в LIKE.

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

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

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

SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'
 64
Author: Explosion Pills, 2015-04-07 13:04:52

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

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

 27
Author: aercolino, 2014-11-21 12:57:10

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

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

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

 5
Author: Karoly Horvath, 2013-02-17 21:46:12

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

SELECT * FROM `table` where `field` LIKE '%\\\%';
 3
Author: Memo, 2014-03-31 07:39:01