一尘不染

如何在MySQL中搜索斜杠(\)?为什么不必须在(=)处转义(\),但需要在Like中转义?

mysql

考虑此查询(此处为演示

(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\\');

阅读 397

收藏
2020-05-17

共1个答案

一尘不染

\``LIKE默认情况下用作转义字符。

手册中获得LIKE

由于MySQL在字符串中使用C转义语法(例如,“ \ n”表示换行符),因此必须对LIKE字符串中使用的任何“ \”加倍。例如,要搜索“ \
n”,请将其指定为“ \\ n”。要搜索“ \”,请将其指定为“ \\\\”;这是因为 解析器一次 删除反斜杠,而
在进行模式匹配时会再次 反斜杠,因此要匹配一个反斜杠。

您可以通过指定另一个转义符来更改此设置,如下所示:

SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'
2020-05-17