如何在 MySQL 中搜索斜杠() ?为什么不是为了某地而是为了喜欢而逃避?

考虑这个查询(DEMO 来了)

(SELECT * FROM `titles` where title = 'test\\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\\\')

产出:

| ID | TITLE |
--------------
|  1 | test\ |
|  1 | test\ |

提问:

为什么不需要额外的 (\)(=),但(像)额外的 \\是必需的? 很明显,MySQL 使用 (测试)逃脱了 (测试),那么使用 (测试)对于 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\\');
82107 次浏览

LIKE接受两个通配符 %_

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

所有这些都记录在 手动操作中。

默认情况下,\LIKE中起转义字符的作用。

手动操作LIKE:

因为 MySQL 在字符串中使用 C 转义语法(例如,“ n”表示换行符) ,所以必须将在 LIKE 字符串中使用的任何“”加倍。例如,要搜索“ n”,请将其指定为“ n”。要搜索“”,请将其指定为“”; 这是因为反斜杠被去掉了 由解析器执行一次再次当模式匹配,只留下一个反斜杠用于匹配。

可以通过指定另一个转义字符来更改此值,如:

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

为了在一个文本字段中找到一个 \,我必须对 \进行两次转义,否则就会找到结尾的 %:

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

事实上,之前所有的答案都在某个地方出错了。正如你在 KarolyHorvath 提供的链接中所看到的,其重要部分由“爆炸药”搜索1个反斜杠()的正确方法是同时使用4个反斜杠()复制。

顺便说一下,为了在单反斜杠上面显示,我必须同时使用两个反斜杠,而为了显示这四个反斜杠,我必须使用八个反斜杠。

如果希望从数据库列(Test’s)中删除(’)并将其替换为撇号(Test’s) ,则可以使用以下查询。

SELECT replace(column_name, "\\'", "'") FROM table where column_name  LIKE "%\\\%";