É uma prática comum no MySQL escapar de caracteres especiais, incluindo a barra invertida (), em consultas para evitar conflitos de interpretação. No entanto, surge uma anomalia curiosa ao comparar o comportamento do operador igual (=) e do operador LIKE em relação à barra invertida.
No caso do operador igual, nenhuma barra invertida adicional é necessária para escapar da barra invertida dentro do termo de pesquisa. Por exemplo, a consulta a seguir recupera a linha onde a coluna de título contém o valor "test\".
SELECT * FROM `titles` WHERE title = 'test\';
O analisador MySQL interpreta automaticamente a barra invertida no termo de pesquisa como um caractere literal, daí a recuperação bem-sucedida.
Ao contrário do operador igual, o operador LIKE requer um barra invertida adicional para escapar da barra invertida no termo de pesquisa. Isso ocorre porque o operador LIKE executa uma correspondência de padrões e a barra invertida atua como um caractere de escape por padrão no SQL. Assim, a consulta a seguir recupera a mesma linha da anterior:
SELECT * FROM `titles` WHERE title LIKE 'test\\\\';
Nesta consulta, as barras invertidas duplas certifique-se de que a única barra invertida no termo de pesquisa seja interpretada literalmente como um caractere de barra invertida.
A razão por trás desse comportamento está enraizada em como o MySQL processa padrões LIKE . O analisador inicialmente remove as barras invertidas do termo de pesquisa. No entanto, quando a correspondência de padrões é executada posteriormente, as barras invertidas são removidas novamente. Isso deixa uma única barra invertida para corresponder ao padrão. Para garantir que a barra invertida seja tratada como um caractere literal, a barra invertida adicional é necessária.
O MySQL permite que você especifique um caractere de escape diferente para padrões LIKE usando a cláusula ESCAPE. Por exemplo, a consulta a seguir usa o caractere de barra vertical (|) como caractere de escape:
SELECT * FROM `titles` WHERE title LIKE 'test\\' ESCAPE '|';
In Neste exemplo, a barra invertida única no termo de pesquisa é interpretada literalmente porque é precedida pelo caractere de escape especificado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3