考虑此查询(此处为演示)
(SELECT * FROM `titles` where title = 'test\\') UNION ALL (SELECT * FROM `titles` where title LIKE 'test\\\\')
输出:
| ID | TITLE | -------------- | 1 | test\ | | 1 | test\ |
为什么 (=)* 不需要额外的 (\) ,而(例如)额外的 \** 则需要?很明显,MySQL对 (IKE \) 使用 (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\\');
\``LIKE默认情况下用作转义字符。
\``LIKE
从手册中获得LIKE:
LIKE
由于MySQL在字符串中使用C转义语法(例如,“ \ n”表示换行符),因此必须对LIKE字符串中使用的任何“ \”加倍。例如,要搜索“ \ n”,请将其指定为“ \\ n”。要搜索“ \”,请将其指定为“ \\\\”;这是因为 解析器 会 一次 删除反斜杠,而 在进行模式匹配时会再次 反斜杠,因此要匹配一个反斜杠。
您可以通过指定另一个转义符来更改此设置,如下所示:
SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'