考虑这个查询(DEMO IS HERE)

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

输出:

| ID | TITLE |
--------------
|  1 | test\ |
|  1 | 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 ;

--
-- Dumping data for table `titles`
--

INSERT INTO `titles` (`id`, `title`) VALUES
(1, 'test\\');

推荐答案

默认情况下,\LIKE中用作转义字符.

manual分到LIKE分:

因为MySQL在字符串中使用C转义语法(例如,"\n"表示换行符),所以必须将在类似字符串中使用的任何"\"加倍.例如,要搜索"\n",请将其指定为"\\n".要搜索"\",请将其指定为"\ \";这是因为反斜杠被go 除once by the parseragain when the pattern match is made,留下一个反斜杠来匹配.

可以通过指定另一个转义字符来更改此设置,如中所示:

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

Mysql相关问答推荐

Google Sheet查询以提取数据并用值替换复选框.(差异)

根据上一行S列结果计算列的查询

MySQL:统计单词在单元格中出现的次数,并将数字放在bra中单词的旁边

为什么MySQL不考虑在联接中使用(JSON)函数索引,而考虑在生成的列上使用索引?

如何使用GROUP BY调优简单SQL查询

MySQL-如何检测时间戳中的一天

使用复合主键更新后的MySQL触发器失败

如何使用sql查询在日期列中按值和最大值分组的表中添加列?

如何在 MySQL 中查找重复值和更新值

检索按键列值分组的最新日期 (MySql)

为什么一个 10 位的电话号码不能存储在长度为 10 的整数中?

由于长时间操作而断开连接后,我的 sql 查询是否继续执行?

巨大的未分区 MySQL 表问题

SQL 中的双杠 (||) 是什么意思?

不是唯一的表/别名

我如何决定何时使用右连接/左连接或内连接或者如何确定哪个表在哪一侧?

如何删除没有临时表的 MySQL 表中的所有重复记录

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

从 MySQL 中的日、月、年字段创建日期

如何从命令行调用带有参数的mysql存储过程?