为什么MySQL中的'a like a'返回false

watbbzwu  于 2022-10-31  发布在  Mysql
关注(0)|答案(1)|浏览(178)

我在MySQL中有一个字符串,当我选择使用like时,它什么也不返回。经过一些调查,我发现MySQL的一个奇怪的行为。

select a,a=a,a like a from (
  select '123' as a union all
  select '\\"'
)x

实验结果:
| 一种|a=a|一个像一个|
| - -|- -|- -|
| 一百二十三|一个|一个|
| “|一个|第0页|
http://sqlfiddle.com/#!9/9eecb/313965
我认为a like a应该总是返回1(a=null除外)

mklgxw1f

mklgxw1f1#

在MySQL的LIKE表达式中,反斜杠保留了一个特殊的含义,即转义它后面的字符。这是必需的,例如,如果我们想在LIKE表达式中包含文字下划线。
请注意以下事实:

'"' LIKE '\"'

这是因为LIKE表达式中的反斜杠是文字,用于转义双引号。以下两个表达式是相同的:

'"' LIKE '\\"'
'"' LIKE '"'

在这里,LIKE后面的双反斜杠被解释为双转义双引号。
您尝试执行的操作的正确版本是:

'\\"' LIKE '\\\\"'

这里的LHS是一个字面反斜杠后面跟双引号。RHS需要 * 四 * 个反斜杠作为字面反斜杠。

相关问题