考虑这个QUERY(DEMO在这里)
(SELECT * FROM `titles` where title = 'test\\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\\\')
Run Code Online (Sandbox Code Playgroud)
输出:
| ID | TITLE |
--------------
| 1 | test\ |
| 1 | test\ |
Run Code Online (Sandbox Code Playgroud)
为什么(= )需要额外的(\),但是(如)需要额外的\\?很明显,MySQL 使用(test \\)转义(test\)然后使用(test \\\\)对LIKE是合乎逻辑的.
表信息:
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\\');
Run Code Online (Sandbox Code Playgroud)
Exp*_*lls 83
\LIKE默认情况下,它用作转义字符.
从手动为LIKE:
因为MySQL在字符串中使用C转义语法(例如,"\n"表示换行符),所以必须将在LIKE字符串中使用的任何"\"加倍.例如,要搜索"\n",请将其指定为"\\n".要搜索"\",请将其指定为"\\\\"; 这是因为反斜杠被剥离解析器一次,并再次当模式匹配成功,留下一个反斜杠对要匹配.
您可以通过指定另一个转义字符来更改此设置,如:
SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'
Run Code Online (Sandbox Code Playgroud)
aer*_*ino 40
实际上,之前的所有答案都在某处被破坏了.正如您在Karoly Horvath提供的链接中所看到的,其重要位由Explosion Pills复制,搜索1个反斜杠(\)的正确方法是一次使用4个反斜杠(\\\\).
顺便说一下,为了显示单个反斜杠,我必须同时使用两个,并显示这四个我必须使用八个.
小智 6
为了\在文本字段中找到 a我不得不转义\两次,否则%在最后找到了:
SELECT * FROM `table` where `field` LIKE '%\\\%';
Run Code Online (Sandbox Code Playgroud)