literały ciągów znaków i znaków ewakuacyjnych w PostgreSQL

głosy
95

Próbuje wstawić znak anulowania w tabeli wyników w ostrzeżenie.

Na przykład:

create table EscapeTest (text varchar(50));

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

Produkuje ostrzeżenie:

WARNING:  nonstandard use of escape in a string literal

( Stosując PSQL 8.2 )

Ktoś wie jak to obejść?

Utwórz 04/08/2008 o 02:00
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
104

Częściowo. Tekst jest włożona, ale nadal generowane jest ostrzeżenie.

I znaleziono dyskusji, która wykazała, że ​​tekst potrzebną do poprzedzony „E”, w następujący sposób:

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

To tłumione ostrzeżenie, ale tekst wciąż nie są zwracane poprawnie. Kiedy dodałem dodatkowy ukośnik jak Michael zasugerował, to działało.

Takie jak:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
Odpowiedział 04/08/2008 o 02:07
źródło użytkownik

głosy
32

Chłodny.

Ja również znaleźć w dokumentacji dotyczącej E:

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

PostgreSQL akceptuje również „Escape” stałe ciągów znaków, które są rozszerzeniem standardu SQL. Ciąg ucieczka stała jest określona poprzez napisanie litery E (górna lub małymi literami) tuż przed otwarciem pojedynczego środki, np E'foo”. (Gdy kontynuuje ciąg ucieczki stała po drugiej stronie linii, napisać e tylko przed pierwszym otwarciem cytatu.) W granicach ciąg ewakuacji, znak backslash (\) rozpoczyna sekwencję backslash ucieczki C-podobnych, w których kombinacja backslashem i kolejnych znaków ( e) stanowi szczególną wartość bajtu. \ B jest cofania \ f jest wysuw \ n jest nowej linii \ r jest wózek zwrotny, \ t jest karta. obsługiwane są również \ cyfr, gdzie cyfry oznacza ósemkowy wartość bajtu i \ xhexdigits, gdzie hexdigits reprezentuje wartość bajt szesnastkowy. (To jest twoja odpowiedzialność, że sekwencje bajtów tworzone są prawidłowe znaki w kodowaniu zestawu znaków serwera.) Każda inna postać po ukośnik jest brane dosłownie. Dlatego, aby zawierać ukośników, napisać dwa ukośniki odwrotne (\\). Również jeden cytat może być zawarta w formie pisemnej ciąg uciec \”, oprócz normalnej drodze«».

Odpowiedział 04/08/2008 o 02:14
źródło użytkownik

głosy
5

Ostrzeżenie zostało wydane ponieważ używasz backslashy w swoich strun. Jeśli chcesz uniknąć wiadomość, wpisz to polecenie „set standard_conforming_strings = on;”. Następnie użyj „E” przed ciągiem tym ukośniki, które chcesz PostgreSQL intrepret.

Odpowiedział 17/02/2010 o 00:51
źródło użytkownik

głosy
3

Uważam, że to bardzo mało prawdopodobne, Postgres obciąć swoje dane na wejściu - to albo go odrzuci lub zapisuje go jako jest.

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=>
Odpowiedział 19/09/2008 o 20:24
źródło użytkownik

głosy
2

Naprawdę głupie pytanie: Czy jesteś pewien, że ciąg jest obcinany, a nie tylko w podziale na LINEBREAK określić (i prawdopodobnie nie pokazując w interfejsie)? Czyli można się spodziewać pole, aby pokazać, jak

To dodaje \ n nie będzie

lub

Cel ten zostanie wstawiony

To nie będzie

Ponadto, co interfejsu używasz? Czy to możliwe, że coś po drodze jest jedzenie swoje backslashy?

Odpowiedział 16/09/2008 o 14:26
źródło użytkownik

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