考虑此查询(此处为演示)
(SELECT * FROM titles
where title = 'test\') UNION ALL (SELECT * FROM titles
where title LIKE 'test\\') 输出:
| 1 | test\ | | 1 | test\ | 题: 为什么(=)不需要额外的(\),而(例如)额外的\则需要?很明显,MySQL对(IKE \)使用(test \)转义了(test \),然后使用(test \\)进行了转义。
表信息:
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 ;
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 '|'来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。