MySQL喜欢搜索特殊字符逃脱

时间:2015-05-18 16:34:28

标签: mysql sql-like

另一个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

3 个答案:

答案 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)

我猜第一种方法应该起作用。

This表示\应该由'%\\%'替换。

删除'在第一个查询中再试一次!!