Der Versuch, ein Escape-Zeichen in eine Tabelle einzufügen, führt zu einer Warnung.
Zum Beispiel:
create table EscapeTest (text varchar(50));
insert into EscapeTest (text) values ('This is the first part \n And this is the second');
Erzeugt die Warnung:
WARNING: nonstandard use of escape in a string literal
(Verwendet PSQL 8.2)
Weiß jemand, wie man das umgehen kann?
Teilweise. Der Text wird eingefügt, aber die Warnung wird weiterhin erzeugt.
Ich fand eine Diskussion, die darauf hinwies, dass dem Text ein 'E' vorangestellt werden muss:
insert into EscapeTest (text) values (E'This is the first part \n And this is the second');
Dadurch wurde die Warnung zwar unterdrückt, aber der Text wurde immer noch nicht korrekt zurückgegeben. Als ich, wie von Michael vorgeschlagen, den zusätzlichen Schrägstrich hinzufügte, funktionierte es.
Als solches:
insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
Cool.
Ich habe auch die Dokumentation über die E:
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
PostgreSQL akzeptiert auch "escape" Stringkonstanten, die eine Erweiterung des SQL-Standards sind. Eine Escape-String-Konstante wird angegeben, indem der Buchstabe E (groß- oder kleingeschrieben) direkt vor das öffnende einfache Anführungszeichen geschrieben wird, z.B. E'foo'. (Wenn Sie eine Escape-String-Konstante über Zeilen hinweg fortsetzen, schreiben Sie E nur vor das erste öffnende Anführungszeichen.) Innerhalb einer Escape-Zeichenkette beginnt ein Backslash-Zeichen (\) eine C-ähnliche Backslash-Escape-Sequenz, bei der die Kombination aus Backslash und nachfolgendem(n) Zeichen einen speziellen Byte-Wert darstellt. \\b ist ein Backspace-Zeichen, \\f ist ein Formfeed-Zeichen, \\n ist ein Zeilenumbruch, \\r ist ein Carriage Return-Zeichen, \\t ist ein Tabulator-Zeichen. Ebenfalls unterstützt werden \digits, wobei digits für einen oktalen Byte-Wert steht, und \xhexdigits, wobei hexdigits für einen hexadezimalen Byte-Wert steht. (Es liegt in Ihrer Verantwortung, dass die von Ihnen erstellten Bytefolgen gültige Zeichen in der Zeichensatzkodierung des Servers sind). Jedes andere Zeichen nach einem Backslash wird wörtlich genommen. Um ein Backslash-Zeichen einzufügen, schreiben Sie also zwei Backslashes (\\). Außerdem kann ein einzelnes Anführungszeichen in eine Escape-Zeichenkette eingeschlossen werden, indem Sie zusätzlich zur normalen Schreibweise '' schreiben.
Eine wirklich dumme Frage: Sind Sie sicher, dass die Zeichenfolge abgeschnitten wird und nicht nur an dem von Ihnen angegebenen Zeilenumbruch unterbrochen wird (und möglicherweise nicht in Ihrer Schnittstelle angezeigt wird)? Erwarten Sie also, dass das Feld wie folgt angezeigt wird
Dies wird eingefügt \n Dies wird nicht sein
oder
Dies wird eingefügt
Dies wird nicht eingefügt
Welche Schnittstelle verwenden Sie? Ist es möglich, dass irgendetwas auf dem Weg Ihre Backslashes frisst?