"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué MySQL requiere barras invertidas dobles para escapar de una barra invertida en consultas LIKE pero no en consultas iguales (=)?

¿Por qué MySQL requiere barras invertidas dobles para escapar de una barra invertida en consultas LIKE pero no en consultas iguales (=)?

Publicado el 2024-11-01
Navegar:951

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

Comprensión del escape de barra diagonal () de MySQL en consultas

Es una práctica común en MySQL escapar de caracteres especiales, incluida la barra invertida (), en consultas para evitar conflictos de interpretación. Sin embargo, surge una curiosa anomalía al comparar el comportamiento del operador igual (=) y el operador LIKE con respecto a la barra invertida.

El operador igual (=)

En el caso del operador igual, no se requiere barra invertida adicional para escapar de la barra invertida dentro del término de búsqueda. Por ejemplo, la siguiente consulta recupera la fila donde la columna de título contiene el valor "prueba\".

SELECT * FROM `titles` WHERE title = 'test\';

El analizador MySQL interpreta automáticamente la barra invertida en el término de búsqueda como un carácter literal, de ahí la recuperación exitosa.

El LIKE Operador

A diferencia del operador igual, el operador LIKE requiere una barra invertida adicional para escapar de la barra invertida en el término de búsqueda. Esto se debe a que el operador LIKE realiza una coincidencia de patrón y la barra invertida actúa como un carácter de escape de forma predeterminada en SQL. Por lo tanto, la siguiente consulta recupera la misma fila que la anterior:

SELECT * FROM `titles` WHERE title LIKE 'test\\\\';

En esta consulta, las barras invertidas dobles asegúrese de que la barra invertida única en el término de búsqueda se interprete literalmente como una barra invertida carácter.

Explicación

La razón detrás de este comportamiento tiene su origen en cómo MySQL procesa los patrones LIKE. Inicialmente, el analizador elimina las barras invertidas del término de búsqueda. Sin embargo, cuando posteriormente se realiza la coincidencia del patrón, las barras invertidas se eliminan una vez más. Esto deja una única barra invertida que se comparará con el patrón. Para garantizar que la barra invertida se trate como un carácter literal, se requiere una barra invertida adicional.

Cambiar el carácter de escape

MySQL le permite especificar un carácter de escape diferente para patrones LIKE usando la cláusula ESCAPE. Por ejemplo, la siguiente consulta utiliza el carácter de barra vertical (|) como carácter de escape:

SELECT * FROM `titles` WHERE title LIKE 'test\\' ESCAPE '|';

En En este ejemplo, la barra invertida única en el término de búsqueda se interpreta literalmente porque está precedida por el carácter de escape especificado.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3