"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o MySQL exige barras invertidas duplas para escapar de uma barra invertida em consultas LIKE, mas não em consultas iguais (=)?

Por que o MySQL exige barras invertidas duplas para escapar de uma barra invertida em consultas LIKE, mas não em consultas iguais (=)?

Publicado em 01/11/2024
Navegar:981

Why Does MySQL Require Double Backslashes to Escape a Backslash in LIKE Queries But Not in Equals (=) Queries?

Compreendendo o escape de barra () do MySQL em consultas

É 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.

O Operador Equal (=)

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.

O Operador LIKE

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.

Explicação

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.

Alterando o caractere de escape

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.

Tutorial mais recente Mais>

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