如何搜索在MySQL斜线(\\)? 为什么转义(\\)不要求需要在那里(=),但对于像?(How

2019-07-20 01:59发布

考虑此查询( DEMO IS HERE )

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

Answer 1:

\功能作为一个转义字符LIKE默认。

从手册的LIKE

因为MySQL使用C转义语法的字符串(例如,“\ n”来表示换行符),就必须加倍任何“\”你是在LIKE字符串中使用。 例如,要搜索“\ n”,指定它为“\\ n”个。 要搜索“\”,指定它为“\\\\”; 这是因为反斜线被分析器剥去一次 又一次当模式匹配 ,留下一个反斜杠对要匹配。

您可以通过指定的其它转义字符,如更改此:

SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'


Answer 2:

事实上,所有以前的答案已某处错位。 正如你可以通过卡罗利·霍瓦斯,其显著位被爆丸转载, 搜索1个反斜线的正确方式提供的链接查看(\)是在一次(\\\\)使用4个反斜杠

顺便说一句,表明单反斜线我不得不用两个一次,并显示出这四个我不得不使用以上八法。



Answer 3:

LIKE接受两个wildchar字符%_

为了能够匹配这些字符,转义,可以用: \% \_ 。 这也意味着,如果你想匹配\ ,它必须被转义为好。

所有这一切都是中记录手册 。



Answer 4:

查找\文本字段中,我不得不逃离\两次,否则%在年底发现:

SELECT * FROM `table` where `field` LIKE '%\\\%';


文章来源: How to search for slash (\\) in MySQL? and why escaping (\\) not required for where (=) but for Like is required?