考虑此查询( 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\\');
\
功能作为一个转义字符LIKE
默认。
从手册的LIKE
:
因为MySQL使用C转义语法的字符串(例如,“\ n”来表示换行符),就必须加倍任何“\”你是在LIKE字符串中使用。 例如,要搜索“\ n”,指定它为“\\ n”个。 要搜索“\”,指定它为“\\\\”; 这是因为反斜线被分析器剥去一次 又一次当模式匹配 ,留下一个反斜杠对要匹配。
您可以通过指定的其它转义字符,如更改此:
SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'
事实上,所有以前的答案已某处错位。 正如你可以通过卡罗利·霍瓦斯,其显著位被爆丸转载, 搜索1个反斜线的正确方式提供的链接查看(\)是在一次(\\\\)使用4个反斜杠 。
顺便说一句,表明单反斜线我不得不用两个一次,并显示出这四个我不得不使用以上八法。
LIKE
接受两个wildchar字符%
和_
。
为了能够匹配这些字符,转义,可以用: \%
\_
。 这也意味着,如果你想匹配\
,它必须被转义为好。
所有这一切都是中记录手册 。
查找\
文本字段中,我不得不逃离\
两次,否则%
在年底发现:
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?