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

MySQL中为何'a LIKE a'返回false?特殊字符串匹配异常求助

问题原因解析

这是因为MySQL里=和LIKE的匹配逻辑根本不一样:

  • =是纯精确字符串匹配:不管字符串里有啥字符,只要两个字符串字节完全一致就返回1,不会做任何特殊解析。
  • LIKE是模式匹配:会把右侧的匹配模式里的特殊字符(通配符%、_,默认转义符\)当成特殊功能字符处理,而不是普通字符。

对应你的场景

你的第二个a值是\"(也就是反斜杠加双引号,SQL里要写成'\\"',你可能用HTML转义写成了'\"'):

  1. a=a直接对比两个完全相同的字符串,自然返回1。
  2. a LIKE a的时候,右侧的匹配模式会被LIKE解析:模式里的\是默认转义符,会把后面的"转成普通字符——也就是说,实际用来匹配的模式变成了",但左边的字符串是\",两者不一样,所以返回0。

另外,如果a是单个反斜杠(SQL里写'\\'),a LIKE a也会返回0——因为模式串最后一个字符是转义符,MySQL会判定这是无效模式,匹配失败。

要让LIKE和=效果一致的办法

有两种方式:

  • 显式指定一个不存在的字符当转义符,让LIKE把所有字符都当普通字符:
    select a,a=a,a like a escape '#' from (
      select '123' as a union all
      select '\\"'
    )x
    
  • 用LIKE BINARY做二进制精确匹配,跳过模式解析:
    select a,a=a,a like binary a from (
      select '123' as a union all
      select '\\"'
    )x
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:00:22