You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL LIKE查询中反斜杠与ESCAPE子句转义下划线的差异问题

MySQL LIKE查询中反斜杠转义与ESCAPE转义下划线的区别

两种转义方式的核心差异在于转义字符的生效规则不同:

  • 反斜杠\是MySQL LIKE语法默认的内置转义字符,无需额外声明即可直接使用,作用是将紧跟在其后的通配符(_匹配任意单个字符、%匹配任意长度任意字符)转换为普通字面量匹配。
  • ESCAPE关键字用于为当前查询自定义指定转义字符,指定后,转义字符本身不再承担原有的语义(比如原本_是通配符,被指定为转义符后就不再是通配符),仅作为转义标记存在:紧跟在转义字符后的第一个字符会被当做普通字面量处理;如果要匹配转义字符本身的字面量,需要连续写两个转义字符。

两条查询结果差异的原因

两条SQL执行结果不同,本质是转义规则的应用逻辑完全不一样:

第一条查询

select 'a_a' like 'a\_a';

这条语句没有自定义转义字符,走默认转义规则:\_中的反斜杠将后续的下划线转义为普通下划线字符,整个匹配规则为「字符a + 普通下划线 + 字符a」,和待匹配字符串a_a完全一致,因此匹配成功,返回1。

第二条查询

select 'a_a' like 'a_a' escape '_';

这条语句手动将下划线_指定为转义字符,此时下划线不再是匹配单个任意字符的通配符,仅作为转义标记存在。我们拆解匹配串a_a的实际语义:

  1. 第一个字符a是普通字面量,匹配待匹配串的开头a
  2. 第二个字符是转义符_,按照规则它会将紧跟的第三个字符a标记为普通字面量
  3. 整个匹配串实际只能匹配长度为2的字符串aa,和长度为3的待匹配串a_a完全不相符,因此匹配失败,返回0。

补充说明:如果非要用_作为转义字符来匹配a_a,正确的匹配串需要写成a__a(即转义符_后面跟一个被转义为普通字符的_),但这种写法可读性极差,非常容易造成语义混淆,实际开发中完全不推荐使用。


内容的提问来源于stack exchange,提问作者user3442754

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:39:18