127

テーブルにエスケープ文字を挿入しようとすると、警告が発生します。

例えば:

create table EscapeTest (text varchar(50));

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

警告を生成します:

WARNING:  nonstandard use of escape in a string literal

PSQL 8.2を使用

誰もがこれを回避する方法を知っていますか?

4

5 に答える 5

146

部分的に。テキストは挿入されますが、警告は引き続き生成されます。

テキストの前に「E」を付ける必要があることを示すディスカッションを見つけました。

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

これにより警告は抑制されましたが、テキストはまだ正しく返されていませんでした。Michaelが提案したようにスラッシュを追加すると、機能しました。

そのような:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
于 2008-08-04T01:07:03.233 に答える
44

涼しい。

Eに関するドキュメントも見つかりました:

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

PostgreSQLは、SQL標準の拡張である「エスケープ」文字列定数も受け入れます。エスケープ文字列定数は、開始一重引用符の直前に文字E(大文字または小文字)を書き込むことによって指定されます(例:E'foo')。(行間でエスケープ文字列定数を継続する場合は、最初の開始引用符の前にのみEを記述します。)エスケープ文字列内で、バックスラッシュ文字(\)はCのようなバックスラッシュエスケープシーケンスを開始します。 s)は特別なバイト値を表します。\ bはバックスペース、\ fはフォームフィード、\ nは改行、\ rはキャリッジリターン、\tはタブです。また、数字が8進数のバイト値を表す\digitsと16進数が16進数のバイト値を表す\xhexdigitsもサポートされています。(作成するバイトシーケンスがサーバーの文字セットエンコーディングで有効な文字であるのはユーザーの責任です。)バックスラッシュに続く他の文字は文字通りに解釈されます。したがって、円記号を含めるには、2つの円記号(\\)を記述します。また、''の通常の方法に加えて、\'と書くことにより、エスケープ文字列に一重引用符を含めることができます。

于 2008-08-04T01:14:57.367 に答える
6

文字列にバックスラッシュを使用しているため、警告が発行されます。このメッセージを回避したい場合は、このコマンド「set standard_conforming_strings=on;」を入力してください。次に、postgresql に解釈させたいバックスラッシュを含む文字列の前に "E" を使用します。

于 2010-02-16T23:51:23.200 に答える
3

Postgres が入力時にデータを切り詰める可能性は非常に低いと思います。データを拒否するか、そのまま保存します。

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=>
于 2008-09-19T19:24:55.850 に答える
0

本当にばかげた質問: 文字列が切り捨てられていて、指定した改行で壊れているだけではない (そしておそらくインターフェイスに表示されていない) ことは確かですか? つまり、フィールドが次のように表示されることを期待していますか

これは挿入されます \n これは挿入されません

また

これが挿入されます

これはありません

また、どのインターフェースを使用していますか?途中で何かがバックスラッシュを食べている可能性はありますか?

于 2008-09-16T13:26:04.093 に答える