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