考虑此QUERY(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使用(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\\');
答案 0 :(得分:75)
\
在LIKE
中用作转义字符。
来自LIKE
的{{3}}:
因为MySQL在字符串中使用C转义语法(例如,“\ n”表示换行符),所以必须将在LIKE字符串中使用的任何“\”加倍。例如,要搜索“\ n”,请将其指定为“\\ n”。要搜索“\”,请将其指定为“\\\\”;这是因为反斜杠在解析器时被剥离一次,而在进行模式匹配时再次,只留下一个反斜杠。
您可以通过指定另一个转义字符来更改此设置,如:
SELECT * FROM `titles` where title LIKE 'test\\' ESCAPE '|'
答案 1 :(得分:33)
实际上,之前的所有答案都在某处被破坏了。正如您在Karoly Horvath提供的链接中所看到的,其重要位由Explosion Pills复制,正确搜索1个反斜杠(\)的方法是一次使用4个反斜杠(\\\\)强>
顺便说一下,为了显示单个反斜杠,我必须同时使用两个,并显示这四个我必须使用八个。
答案 2 :(得分:6)
答案 3 :(得分:3)
要在文本字段中找到\
,我必须两次转义\
,否则最后找到%
:
SELECT * FROM `table` where `field` LIKE '%\\\%';
答案 4 :(得分:0)
如果要从数据库列(Test \'s)中删除(\')并将其替换为撇号(Test's),则可以使用以下查询。
SELECT replace(column_name, "\\'", "'") FROM table where column_name LIKE "%\\\%";