MariaDB LIKE语句转义符异常行为问题咨询
关于MySQL LIKE查询匹配JSON字段中反斜杠的问题
1. 为什么第一个LIKE查询没有结果?
这是因为MySQL的LIKE操作默认把反斜杠(\)当作转义符,再加上SQL字符串本身的转义规则,导致查询模式被解析后和实际存储内容不匹配:
- 数据库
payload字段里的JSON字符串包含"displayName":"App\\Jobs\\V1\\ProcessOrdersPendingCourier"——这里的\\是JSON的转义写法,对应字段文本里的两个连续反斜杠。 - 第一个查询里的
'App\\\\Jobs'经过SQL字符串转义后,会变成App\\Jobs(四个反斜杠缩减为两个)。但由于LIKE默认用\做转义符,这两个反斜杠会被进一步解析:第一个\是转义符,第二个\被转义成单个普通反斜杠。 - 最终查询模式变成匹配
App\Jobs(单个反斜杠),但数据库里实际是App\\Jobs(两个反斜杠),自然匹配不到记录。
2. 为什么必须使用ESCAPE字符?
当你通过ESCAPE '#'指定自定义转义符后,MySQL会放弃默认的\转义符,转而用#作为唯一转义符:
- 此时查询模式里的
\\不再被当作转义序列,而是直接被识别为两个普通的反斜杠字符,和数据库payload字段里存储的内容完全一致,因此能精准匹配到目标记录。 - 你可以用@、&等任意非特殊字符作为转义符(只要它不在匹配模式里出现);但不能用\,因为SQL字符串本身需要转义\,指定
ESCAPE '\\'会再次陷入转义循环,无法解决问题。
内容的提问来源于stack exchange,提问作者goodUser
相关产品推荐
相关产品推荐

