Как искать косую черту () в 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\\');
4 answers
\
по умолчанию используется как escape-символ в LIKE
.
Поскольку MySQL использует синтаксис экранирования C в строках (например, "\n" для представления символа новой строки), вы должны удвоить любой "\", который вы используете в ПОДОБНЫХ строках. Например, для поиска "\n" укажите его как "\\n". Для поиска "\" укажите его как "\\\\"; это связано с тем, что обратные косые черты удаляются один раз синтаксическим анализатором и снова, когда шаблон выполняется сопоставление, оставляя одну обратную косую черту для сопоставления.
Вы можете изменить это, указав другой escape-символ, например:
SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'
На самом деле, все предыдущие ответы были где-то искажены. Как вы можете видеть по ссылке, предоставленной Кароли Хорватом, чей значащий бит воспроизводится таблетками взрыва, правильный способ поиска 1 обратной косой черты (\) - использовать 4 обратных косых черты одновременно (\\\\).
Кстати, чтобы показать выше эту единственную обратную косую черту, мне пришлось использовать две сразу, а чтобы показать эти четыре, мне пришлось использовать восемь.
Для поиска \
в текстовом поле мне пришлось дважды экранировать \
, иначе %
в конце было найдено:
SELECT * FROM `table` where `field` LIKE '%\\\%';