Base de données - Effet de standard_conforming_strings sur '\\' dans la base de données postgresql

Description du problème : utilisez toujours l'expression régulière ('\\d{10}') pour interroger la valeur qui commence par un nombre et est une valeur de dix nombres. '\\d' signifie qu'elle commence par un nombre, et c'est toujours ok , du coup un jour '\\d' ne marche plus, j'ai cherché toute la matinée et n'ai trouvé aucune raison, j'ai demandé au personnel de gestion de la base de données de savoir que la base de données a été mise à jour avant-hier, de 9.1 à 9.5. Puis je suis allé enquêter dans ce sens, Découvrir l'effet de standard_conforming_strings sur '\\'.

 

Introduction à la fonction standard_conforming_strings

Les échappements Unicode sont appliqués si l'encodage du serveur est UTF-8.

Dans la syntaxe d'échappement Unicode, tout autre caractère après la barre oblique inverse est utilisé littéralement. Par conséquent, pour inclure un caractère barre oblique inverse, écrivez deux barres obliques inverses ( \\). Autrement dit, si vous voulez exprimer la signification de '\d' , écrivez '\\d' dans le texte sql .

De plus, la syntaxe d'échappement Unicode pour les constantes de chaîne ne fonctionne que si le paramètre de configuration standard_conforming_strings est activé. En effet, la syntaxe peut confondre les clients lors de l'analyse des instructions SQL au point où une injection SQL et des problèmes de sécurité similaires peuvent en résulter. Si le paramètre est défini sur off, cette syntaxe sera rejetée avec un message d'erreur. Pour inclure littéralement le caractère d'échappement, écrivez-le deux fois

Solution : Il n'y a pas de problème avec le texte SQL, ou si le texte SQL n'est pas modifié, recherchez le fichier postgresql.conf (chemin D:\Program Files\PostgreSQL\9.6\data, sous le dossier de données sous le chemin d'installation de PostgreSQL) , et définissez standard_conforming_strings = on ; ( il peut y avoir un # devant le paramètre standard_conforming_strings dans le fichier de configuration, ce qui signifie qu'il est commenté et qu'il est correct de le supprimer )

avertir

PostgreSQL peut reconnaître les échappements par barre oblique inverse dans les constantes de chaîne normales et échappées si le paramètre de configuration standard_conforming_strings est . offCependant, depuis PostgreSQL 9.1, la valeur par défaut est on, ce qui signifie que les échappements antislash ne sont reconnus que dans les constantes de chaîne échappées. Ce comportement est plus conforme aux normes, mais peut casser les applications qui s'appuient sur le comportement historique dans lequel les échappements antislash étaient toujours reconnus. Pour contourner ce problème, ce paramètre peut être défini sur off, mais de préférence sans échappement de barre oblique inverse pour les migrations. Si vous devez utiliser des barres obliques inverses pour représenter des caractères spéciaux, utilisez des constantes de chaîne d'écriture E.

Entre autres choses standard_conforming_strings, les paramètres de configuration escape_string_warning et backslash_quote contrôlent la gestion des antislashs dans les constantes de chaîne.

 

Je suppose que tu aimes

Origine blog.csdn.net/dazhanglao/article/details/105482728
conseillé
Classement