Base de datos: efecto de standard_conforming_strings en '\\' en la base de datos postgresql

Descripción del problema: Siempre use la expresión regular ('\\d{10}') para consultar el valor que comienza con un número y es un valor de diez números. '\\d' significa que comienza con un número, y siempre está bien, de repente un día '\\d' ya no funciona, busqué toda la mañana y no encontré ninguna razón, le pedí al personal de administración de la base de datos que supiera que la base de datos se actualizó anteayer, de 9.1 a 9.5. Luego fui a investigar en esta dirección, descubrí el efecto de standard_conforming_strings en '\\'.

 

Introducción a la función standard_conforming_strings

Los escapes Unicode se aplican si la codificación del servidor es UTF-8.

En la sintaxis de escape de Unicode, cualquier otro carácter después de la barra invertida se usa literalmente. Por lo tanto, para incluir un carácter de barra invertida, escriba dos barras invertidas ( \\). Es decir, si desea expresar el significado de '\d' , escriba '\\d' en el texto sql .

Además, la sintaxis de escape de Unicode para constantes de cadena solo funciona si el parámetro de configuración standard_conforming_strings está activado. Esto se debe a que la sintaxis puede confundir a los clientes que analizan las sentencias de SQL hasta el punto en que pueden producirse problemas de inyección de SQL y de seguridad similares. Si el parámetro está desactivado, esta sintaxis se rechazará con un mensaje de error. Para incluir literalmente el carácter de escape, escríbalo dos veces

Solución: no hay ningún problema con el texto de sql, o si el texto de sql no se modifica, busque el archivo postgresql.conf (ruta D:\Archivos de programa\PostgreSQL\9.6\data, en la carpeta de datos en la ruta de instalación de PostgreSQL) , y configure standard_conforming_strings = on ; ( Puede haber un # delante de la configuración de standard_conforming_strings en el archivo de configuración, lo que significa que está comentado y está bien eliminarlo )

advertir

PostgreSQL puede reconocer escapes de barra invertida en constantes de cadena regulares y con escape si el parámetro de configuración standard_conforming_strings es . offSin embargo, a partir de PostgreSQL 9.1, el valor predeterminado es on, lo que significa que los escapes de barra invertida solo se reconocen en las constantes de cadena con escape. Este comportamiento es más compatible con los estándares, pero puede interrumpir las aplicaciones que se basan en el comportamiento histórico en el que siempre se reconocían los escapes de barra invertida. Como solución alternativa, este parámetro se puede establecer en off, pero preferiblemente sin que se escape la barra invertida para las migraciones. Si necesita usar escapes de barra invertida para representar caracteres especiales, use constantes de cadena de escritura E.

Entre otras cosas standard_conforming_strings, los parámetros de configuración escape_string_warning y backslash_quote controlan el manejo de las barras invertidas en las constantes de cadena.

 

Supongo que te gusta

Origin blog.csdn.net/dazhanglao/article/details/105482728
Recomendado
Clasificación