Littéraux de chaîne et des caractères d'échappement dans postgresql

voix
95

Toute tentative d'insérer un caractère d'échappement dans un tableau de résultats dans un avertissement.

Par exemple:

create table EscapeTest (text varchar(50));

insert into EscapeTest (text) values ('This is the first part \n And this is the second');

Produit l'avertissement:

WARNING:  nonstandard use of escape in a string literal

( L' utilisation PSQL 8.2 )

Quelqu'un sait comment contourner cela?

Créé 04/08/2008 à 02:00
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
104

Partiellement. Le texte est inséré, mais l'avertissement est toujours généré.

J'ai trouvé une discussion qui a indiqué le texte devait être précédé d'un « E », en tant que tel:

insert into EscapeTest (text) values (E'This is the first part \n And this is the second');

Cette suppression de l'avertissement, mais le texte n'a toujours pas retourné correctement. Quand j'ai ajouté la barre oblique supplémentaire comme Michael a suggéré, il a travaillé.

En tant que tel:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
Créé 04/08/2008 à 02:07
source utilisateur

voix
32

Cool.

J'ai aussi trouvé la documentation sur l'E:

http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

PostgreSQL accepte aussi les constantes de chaîne « d'échappement », qui sont une extension du standard SQL. est spécifié une chaîne d'échappement constante en écrivant la lettre E (majuscules ou minuscules) juste avant la seule citation d'ouverture, par exemple E'foo. (Lorsque la poursuite d'une chaîne d'échappement constante à travers les lignes, écrivez E seulement avant la première citation d'ouverture.) Au sein d'une chaîne d'échappement, un caractère de barre oblique inverse (\) commence une séquence d'échappement backslash C-like, dans lequel la combinaison de backslash et le caractère suivant ( s) représente une valeur d'octet particulière. \ B est un retour arrière, \ f est un aliment de forme, \ n est un saut de ligne, \ r est un retour chariot, \ t est une patte. Sont également supportés \ chiffres, où les chiffres représentent une valeur d'octet octal, et \ xhexdigits, où hexdigits représente une valeur d'octet hexadécimal. (Il est de votre responsabilité que les séquences d'octets que vous créez sont des caractères valides dans le codage du jeu de caractères du serveur.) Tout autre caractère suivant une barre oblique inverse est pris à la lettre. Ainsi, pour inclure un caractère de barre oblique inverse, écrire deux barres obliques inversées (\\). En outre, une seule offre peut être inclus dans une chaîne d'échappement en écrivant \ », en plus de la façon normale de « ».

Créé 04/08/2008 à 02:14
source utilisateur

voix
5

L'avertissement est émis puisque vous utilisez des barres obliques inverses dans vos cordes. Si vous voulez éviter le message, tapez cette commande « set standard_conforming_strings = on; ». Ensuite, utilisez « E » avant votre chaîne, y compris antislashs que vous voulez postgresql à intrepret.

Créé 17/02/2010 à 00:51
source utilisateur

voix
3

Je trouve qu'il est très improbable pour Postgres tronquer vos données sur l'entrée - il soit rejette ou les magasins où ils sont.

milen@dev:~$ psql
Welcome to psql 8.2.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

milen=> create table EscapeTest (text varchar(50));
CREATE TABLE
milen=> insert into EscapeTest (text) values ('This will be inserted \n This will not be');
WARNING:  nonstandard use of escape in a string literal
LINE 1: insert into EscapeTest (text) values ('This will be inserted...
                                              ^
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
INSERT IGNORE  0 1
milen=> select * from EscapeTest;
          text
------------------------
 This will be inserted
  This will not be
(1 row)

milen=>
Créé 19/09/2008 à 20:24
source utilisateur

voix
2

Vraiment stupide question: Etes-vous sûr la chaîne tronquée est d'être, et pas seulement cassé au linebreak vous spécifiez (et peut-être ne pas montrer dans votre interface)? À savoir, ce que vous attendez le terrain pour montrer que

Ce sera inséré \ n Ce ne sera pas

ou

Ce sera inséré

Ce ne sera pas

En outre, quelle interface utilisez-vous? Est-il possible que quelque chose le long du chemin est en train de manger vos antislashs?

Créé 16/09/2008 à 14:26
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more