Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 rjohnston
rjohnston

String literali și caractere de escape în postgresql

Încercarea de a insera un caracter de evacuare într-un tabel duce la un avertisment.

De exemplu:

create table EscapeTest (text varchar(50));

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

Produce avertizarea:

WARNING:  nonstandard use of escape in a string literal

( Utilizarea PSQL 8.2 )

Oricine știe cum să treacă prin asta?

104 2008-08-04T01:00:24+00:00 4
Programare
postgresql
string
escaping
Comentarii la întrebare (0)
rjohnston
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#938

Parţial. Textul este introdus, dar avertismentul este încă generat.

Am găsit o discuție care a indicat că textul trebuie precedat cu "E", ca atare:

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

Acest lucru a suprimat avertismentul, dar textul nu a fost încă returnat corect. Când am adăugat slash-ul suplimentar așa cum mi-a sugerat Michael, a funcționat.

Ca atare:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
0
0
Comentarii (0)
Michael Stum
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#943

Misto.

De asemenea, am găsit documentația referitoare la E:

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

PostgreSQL acceptă, de asemenea, constante șir "escape", care reprezintă o extensie la standardul SQL. O constantă a șirului de evacuare este specificată prin scrierea literei E (cu majuscule sau cu majuscule) chiar înainte de citarea unică de deschidere, de ex. E'foo“. (Atunci când continuați o constantă șir de evacuare în linie, scrieți E numai înainte de prima citare de deschidere.) Într-un șir de evacuare, un caracter invers (\) începe o secvență de evadare ca înapoi, în care combinația lunetei și următorul caracter ( s) reprezintă o valoare octeală specială. \ b este un spațiu de backspace, \ f este un feed, \ n este un rând nou, \ r este o retur de carriage, \ t este o filă. De asemenea, sunt acceptate \ cifre, unde cifrele reprezintă o valoare octală octeală și \ xhexdigits, unde hexdigiți reprezintă o valoare byte hexazecimală. (Este responsabilitatea ta ca secvențele de octeți pe care le creezi să fie caractere valide în codificarea setului de caractere al serverelor.) Orice alt caracter urmând o backslash este luat literal. Astfel, pentru a include un caracter invers, scrieți două spate (\\). De asemenea, o singură citare poate fi inclusă într-un șir de evacuare scriind \ ', pe lângă modul normal de' '.

0
0
Comentarii (0)
Utilizator anonim
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#72132

Întrebare cu adevărat stupidă: Sunteți sigur că șirul este trunchiat și nu doar rupt la linia pe care o specificați (și, eventual, nu se va afișa în interfața dvs.)? De exemplu, vă așteptați ca câmpul să apară ca

Va ​​fi inserat \ n Acest lucru nu va fi   fie

sau

Acesta va fi inserat

     

Aceasta nu va fi

De asemenea, ce interfață folosiți? Este posibil ca ceva de-a lungul drumului să vă mănânce spatele?

0
0
Comentarii (0)
Milen A. Radev
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#104780

Mi se pare foarte puțin probabil ca Postgres să taie datele dvs. pe intrare - fie o respinge, fie o stochează așa cum este.

[email protected]:~$ 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 0 1
milen=> select * from EscapeTest;
          text
------------------------
 This will be inserted
  This will not be
(1 row)

milen=>
0
0
Comentarii (0)
eppesuig
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#2277307

Avertizarea se emite din moment ce folosiți spate-lămpi în șiruri de caractere. Dacă doriți să evitați mesajul, tastați această comandă "set standard_conforming_strings = on;". Apoi folosiți "E" înainte de șirul dvs., inclusiv backslash-urile pe care doriți să le interpretați postgresql.

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire