String literal dan melarikan diri karakter di postgresql

Mencoba untuk menyisipkan karakter melarikan diri ke dalam tabel hasil di peringatan.

Misalnya:

create table EscapeTest (text varchar(50));

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

Menghasilkan peringatan:

WARNING:  nonstandard use of escape in a string literal

(Menggunakan PSQL 8.2)

Ada yang tahu bagaimana untuk mendapatkan sekitar ini?

Larutan

Sebagian. Teks yang dimasukkan, tetapi peringatan ini masih dihasilkan.

Saya menemukan diskusi yang ditunjukkan teks yang diperlukan harus didahului dengan 'E', seperti:

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

Ini ditekan peringatan, tetapi teks itu masih belum dikembalikan dengan benar. Ketika saya menambahkan tambahan slash sebagai Michael menyarankan, itu bekerja.

Seperti:

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

Keren.

Saya juga menemukan dokumentasi mengenai E:

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

PostgreSQL juga menerima "melarikan diri" string konstanta, yang merupakan perpanjangan ke SQL standar. Melarikan diri string konstan ditentukan oleh tulisan huruf E (atas atau bawah) sebelum pembukaan kutip tunggal, misalnya E'foo'. (Ketika melanjutkan pelarian string konstan di seluruh baris, menulis E hanya sebelum pembukaan penawaran.) Dalam pelarian string, karakter backslash (\) mulai C-seperti backslash urutan escape, di mana kombinasi dari backslash dan karakter berikut(s) mewakili khusus nilai byte. \b backspace, \f adalah bentuk pakan, \n newline, \r carriage return, \t tab. Juga didukung adalah \digit, dimana angka yang mewakili octal nilai byte, dan \xhexdigits, di mana hexdigits merupakan heksadesimal nilai byte. (Itu adalah tanggung jawab anda bahwa urutan byte yang anda buat adalah karakter yang valid di server set karakter encoding.) Karakter lain sebagai berikut backslash diambil secara harfiah. Dengan demikian, untuk memasukkan karakter backslash, menulis dua garis miring terbalik (\\). Juga, kutip tunggal dapat dimasukkan dalam pelarian string dengan menulis \', di samping cara normal ''.

Komentar (0)

Peringatan ini dikeluarkan karena anda menggunakan backslashes pada string. Jika anda ingin menghindari pesan, ketik perintah ini "set standard_conforming_strings=on;". Kemudian gunakan "E" sebelum anda string termasuk garis miring terbalik yang anda inginkan postgresql untuk intrepret.

Komentar (3)

Saya menemukan itu sangat tidak mungkin untuk Postgres untuk memotong data anda pada input - hal baik yang menolak atau toko-toko seperti ini.

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=>
Komentar (3)

Benar-benar bodoh pertanyaan: Apakah anda yakin string yang terpotong, dan tidak hanya rusak di linebreak anda tentukan (dan mungkin tidak ditampilkan di interface)? Yaitu, apakah anda mengharapkan lapangan untuk menunjukkan sebagai

Ini akan dimasukkan \n Ini tidak akan menjadi

atau

Ini akan dimasukkan

Ini tidak akan

Juga, apa yang antarmuka yang anda gunakan? Adalah mungkin bahwa sesuatu sepanjang jalan makan anda garis miring terbalik?

Komentar (1)