Banco de dados - Efeito de standard_conforming_strings em '\\' no banco de dados postgresql

Descrição do problema: Sempre use a expressão regular ('\\d{10}') para consultar o valor que começa com um número e é um valor de dez números. '\\d' significa que começa com um número, e está sempre ok, de repente um dia '\\d' não funciona mais, procurei a manhã toda e não encontrei motivo, pedi ao pessoal da administração do banco de dados para saber que o banco de dados foi atualizado anteontem, de 9.1 para 9.5. Então fui investigar nessa direção, descobrir o efeito de standard_conforming_strings em '\\'.

 

Introdução à função standard_conforming_strings

Os escapes Unicode são aplicados se a codificação do servidor for UTF-8.

Na sintaxe de escape Unicode, qualquer outro caractere após a barra invertida é usado literalmente. Portanto, para incluir um caractere de barra invertida, escreva duas barras invertidas ( \\). Ou seja, se você deseja expressar o significado de '\d' , escreva '\\d' no texto sql .

Além disso, a sintaxe de escape Unicode para constantes de string só funciona se o parâmetro de configuração standard_conforming_strings estiver ativado. Isso ocorre porque a sintaxe pode confundir os clientes ao analisar instruções SQL a ponto de resultar em injeção de SQL e problemas de segurança semelhantes. Se o parâmetro estiver desativado, esta sintaxe será rejeitada com uma mensagem de erro. Para incluir literalmente o caractere de escape, escreva-o duas vezes

Solução: Não há problema com o texto sql, ou se o texto sql não for alterado, localize o arquivo postgresql.conf (caminho D:\Arquivos de Programas\PostgreSQL\9.6\data, na pasta de dados no caminho de instalação do PostgreSQL) , e defina standard_conforming_strings = on ; ( Pode haver um # na frente da configuração standard_conforming_strings no arquivo de configuração, o que significa que está comentado e não há problema em removê-lo )

avisar

O PostgreSQL pode reconhecer escapes de barra invertida em constantes de string regulares e com escape se o parâmetro de configuração standard_conforming_strings for . offNo entanto, a partir do PostgreSQL 9.1, o padrão é on, o que significa que os escapes de barra invertida são reconhecidos apenas em constantes de string com escape. Esse comportamento é mais compatível com os padrões, mas pode interromper aplicativos que dependem do comportamento histórico no qual as barras invertidas sempre foram reconhecidas. Como solução alternativa, esse parâmetro pode ser definido como off, mas de preferência sem a barra invertida escapando para migrações. Se você precisar usar escapes de barra invertida para representar caracteres especiais, use constantes de string de gravação E.

Entre outras coisas standard_conforming_strings, os parâmetros de configuração escape_string_warning e backslash_quote controlam a manipulação de contrabarras em constantes de string.

 

Acho que você gosta

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