另一个MySQL LIKE
搜索没有返回任何内容
我的MySQL数据库中包含“\'”
的内容然而我无法找到它们,因为我的查询返回任何内容或太多项目,具体取决于我如何格式化相似参数。
这不会再发生任何事情:
SELECT element
FROM `elements`
WHERE body LIKE '%\\\'%'
LIMIT 5
这会返回几乎所有项目,因为许多项目持有单引号char
SELECT element
FROM `elements`
WHERE body LIKE '%\'%'
LIMIT 5
这不起作用:
SELECT element_id
FROM `element_body`
WHERE element_body LIKE '%|\|'%' ESCAPE'|'
LIMIT 5
答案 0 :(得分:2)
要进行LIKE
比较以匹配“ \'
”(字面反斜杠字符后跟文字单引号,可以这样做,但确实需要一些小心注意逃避。
最大的问题是MySQL使用字符串文字中的反斜杠字符作为“转义”字符...例如\n
代表一个换行符。
这是一个演示。
SELECT t.foo
, t.foo LIKE '%\\\\''%' AS `match_`
FROM (
SELECT 'abc\\''def' AS `foo`
UNION ALL SELECT 'gh\\i\\j'
UNION ALL SELECT 'k\\lm''n'
) t
LIKE
比较的结果将作为第二列返回。值1
表示TRUE,值0
表示FALSE。)
foo match_
-------- ------
abc\'def 1
gh\i\j 0
k\lm'n 0
让我们解开一点。
要在字符串文字中表示单引号,我们需要使用两个单引号。举个例子:
SELECT 'I''m home' --> I'm home
要在字符串文字中获取文字反斜杠,我们需要一个两个反斜杠。第一个反斜杠启动正常的MySQL“转义序列”,第二个反斜杠是转义的字符。例如:
SELECT 'a\\b' --> a\b
在LIKE
比较中,反斜杠字符被视为“转义”字符。我们在'%'
或'_'
(百分比或下划线字符,通常被解释为外卡)之前使用它来将那些解释为我们想要匹配的文字字符。
要使LIKE
比较与文字反斜杠字符匹配,我们需要两个反斜杠字符。正如我们刚刚演示的那样,要在字符串文字中获得反斜杠字符,需要两个反斜杠。所以我们需要总共四个反斜杠字符。
答案 1 :(得分:1)
您可能需要使用REGEXP运算符。
SELECT element FROM elements WHERE body RLIKE '%\\%' LIMIT 5
答案 2 :(得分:0)