Strenger og escape-tegn i postgresql

stemmer
95

Forsøk på å sette inn en flukt karakter inn i en tabell resulterer i en advarsel.

For eksempel:

create table EscapeTest (text varchar(50));

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

Produserer advarselen:

WARNING:  nonstandard use of escape in a string literal

( Ved hjelp av psql 8,2 )

Noen vet å komme rundt dette?

Publisert på 04/08/2008 klokken 01:00
kilden bruker
På andre språk...                            


5 svar

stemmer
108

Delvis. Teksten er satt inn, men varsel fremdeles frembringes.

Jeg har funnet en diskusjon som er angitt i teksten som trengs for å bli innledet med 'E', som for eksempel:

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

Dette undertrykt advarselen, men teksten var fortsatt ikke blir returnert riktig. Når jeg har lagt ekstra slash som Michael foreslo, det fungerte.

Som sådan:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
Svarte 04/08/2008 kl. 01:07
kilden bruker

stemmer
32

Kul.

Jeg har også funnet dokumentasjon om E:

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

PostgreSQL aksepterer også "escape" streng konstanter, som er en utvidelse til SQL-standarden. En flukt streng konstant er spesifisert ved å skrive bokstaven E (store eller små bokstaver) like før åpningen enkelt sitat, f.eks E'foo'. (Når fortsetter en flukt streng konstant over linjer, skrive E bare før den første åpning sitat.) Innenfor en flukt streng, en omvendt skråstrek (\) begynner en C-liknende skråstrek escape-sekvens, karakterisert ved at kombinasjonen av skråstrek og etterfølgende tegn ( e) representerer en spesiell byte verdi. \ B er en tilbake, er \ f et fremmating, \ n er et linjeskift, er \ r vognretur, \ t er en fane. Også støttes er \ sifre, hvor tallene betegner en oktal byte verdi, og \ xhexdigits, hvor hexdigits representerer en heksadesimal verdi byte. (Det er ditt ansvar at bytesekvenser du lager, er gyldige tegn i serveren tegnsettet.) Enhver annen karakter etter en skråstrek tas bokstavelig. Derfor, for å inkludere en omvendt skråstrek, skrive to omvendte skråstreker (\\). Dessuten kan et enkelt sitat inngå i en flukt streng ved å skrive \', i tillegg til den normale måten å ''.

Svarte 04/08/2008 kl. 01:14
kilden bruker

stemmer
5

Advarselen er utgitt siden du bruker omvendt skråstrek i dine strenger. Hvis du ønsker å unngå meldingen, skriver denne kommandoen "set standard_conforming_strings = på;". Deretter bruker "E" før strengen inkludert backslashes du vil PostgreSQL til intrepret.

Svarte 16/02/2010 kl. 23:51
kilden bruker

stemmer
3

Jeg finner det svært usannsynlig for Postgres avkorte dine data på innspill - det enten forkaster den eller lagrer det som er.

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 0 1
milen=> select * from EscapeTest;
          text
------------------------
 This will be inserted
  This will not be
(1 row)

milen=>
Svarte 19/09/2008 kl. 19:24
kilden bruker

stemmer
2

Veldig dumt spørsmål: Er du sikker på at strengen blir avkortet, og ikke bare brutt på linebreak du angir (og muligens ikke vises i grensesnittet)? Dvs, forventer du at feltet for å vise som

Dette vil bli satt inn \ n Dette vil ikke bli

eller

Dette vil bli innsatt

Dette vil ikke være

Også, hva grensesnittet bruker du? Er det mulig at noe underveis er å spise dine backslashes?

Svarte 16/09/2008 kl. 13:26
kilden bruker

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