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