Stringliterale und Escape-Zeichen in postgresql

stimmen
95

Der Versuch, ein Escape-Zeichen in eine Tabelle, die Ergebnisse in einer Warnung einzufügen.

Beispielsweise:

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

( Mit PSQL 8.2 )

Wer weiß, wie dies zu umgehen?

Veröffentlicht am 04/08/2008 um 02:00
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
104

Teilweise. Der Text wird eingefügt, aber die Warnung noch erzeugt.

Ich fand eine Diskussion, die den Text angegeben benötigt, um mit ‚E‘ vorangestellt wird, wie zum Beispiel:

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

Dies unterdrückt die Warnung, aber der Text wurde noch nicht korrekt zurückgegeben. Als ich den zusätzlichen Schrägstrich hinzugefügt, wie Michael vorgeschlagen, es funktionierte.

So wie:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
Beantwortet am 04/08/2008 um 02:07
quelle vom benutzer

stimmen
32

Cool.

Ich fand auch die Dokumentation in Bezug auf die E:

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

PostgreSQL akzeptiert auch „escape“ String-Konstanten, die eine Erweiterung des SQL-Standards sind. Ein Escape-String-Konstante wird durch Schreiben des Buchstaben E (Groß- oder Kleinschreibung) kurz vor dem Öffnen Apostroph, zB E'foo‘angegeben. (Wenn eine Escape-Zeichenfolge weiterhin konstant über Linien, schreibt E nur vor dem ersten Öffnen Zitat.) Im Rahmen einer Escape-Zeichenfolge, ein Backslash (\) beginnt eine C-ähnliche Backslash-Escape-Sequenz, in der die Kombination von Backslash und folgenden Zeichen ( s) stellt einen speziellen Byte-Wert. b \ ist ein Backspace, \ f ein Formularvorschub ist, \ n ist eine Neue-Zeile, \ r ein Wagenrücklauf ist, ist \ t eine Registerkarte. Auch \ Stellen unterstützt werden, in denen Ziffern ein Oktal-Byte-Wert repräsentiert, und \ xhexdigits, wo hexdigits einen hexadezimalen Byte-Wert darstellt. (Es ist Ihre Verantwortung, dass die Byte-Sequenzen Sie gültige Zeichen in der Server-Zeichensatz-Codierung erstellen sind.) Jedes anderes Zeichen nach einem umgekehrten Schrägstrich wird wörtlich genommen. Somit einen umgekehrten Schrägstrich umfassen, schreiben zwei Schrägstriche (\\). Auch kann ein Apostroph in einem Escape-String enthalten sein, indem er \‘, zusätzlich zu dem normalen Weg der‚‘.

Beantwortet am 04/08/2008 um 02:14
quelle vom benutzer

stimmen
5

Die Warnung ausgegeben, da Sie Schrägstriche in den Saiten verwenden. Wenn Sie die Meldung vermeiden möchten, geben Sie diesen Befehl „standard_conforming_strings gesetzt = on;“. Verwenden Sie dann „E“ vor der Zeichenfolge einschließlich Schrägstriche, die Sie postgresql zu Spaltenbindung wollen.

Beantwortet am 17/02/2010 um 00:51
quelle vom benutzer

stimmen
3

Ich finde es höchst unwahrscheinlich, für Postgres Ihre Daten bei der Eingabe zu kürzen - es entweder ablehnt oder speichert sie, wie ist.

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=>
Beantwortet am 19/09/2008 um 20:24
quelle vom benutzer

stimmen
2

Wirklich dumme Frage: Sind Sie sicher, dass die Zeichenfolge abgeschnitten werden, und nicht nur an dem Zeilenumbruch Sie (und möglicherweise nicht in der Schnittstelle angezeigt) angeben gebrochen? Dh, erwarten Sie das Feld zu zeigen,

Dies wird eingefügt \ n Dies wird nicht

oder

Dies wird eingeführt

Dies wird nicht sein

Auch, welche Schnittstelle verwenden Sie? Ist es möglich, dass etwas auf dem Weg Ihre Schrägstriche isst?

Beantwortet am 16/09/2008 um 14:26
quelle vom benutzer

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