κατεξοχήν συμβολοσειρά και χαρακτήρες διαφυγής στην PostgreSQL

ψήφοι
95

Προσπαθώντας να εισάγετε ένα χαρακτήρα διαφυγής σε έναν πίνακα αποτελεσμάτων σε μια προειδοποίηση.

Για παράδειγμα:

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 )

Καθένας ξέρει πώς να πάρει γύρω από αυτό;

Δημοσιεύθηκε 04/08/2008 στις 02:00
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
104

Εν μέρει. Το κείμενο εισάγεται, αλλά η προειδοποίηση εξακολουθεί να παράγεται.

Βρήκα μια συζήτηση που έδειξε το κείμενο έπρεπε να προηγηθεί με «Ε», καθώς όπως:

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');
Απαντήθηκε 04/08/2008 στις 02:07
πηγή χρήστη

ψήφοι
32

Δροσερός.

Βρήκα επίσης την τεκμηρίωση σχετικά με το E:

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

PostgreSQL δέχεται επίσης «διαφυγής» σταθερές χορδών, η οποία είναι μια επέκταση του SQL πρότυπο. Μια συμβολοσειρά διαφυγής σταθερή καθορίζεται γράφοντας το γράμμα Ε (άνω ή κάτω θήκης) ακριβώς πριν από το άνοιγμα και μόνο προσφορά, π.χ. E'foo». (Όταν συνεχίζοντας μια συμβολοσειρά διαφυγής σταθερή σε όλη γραμμές, γράψε Ε μόνο πριν από το πρώτο άνοιγμα απόσπασμα.) Μέσα σε μια συμβολοσειρά διαφυγής, ένας χαρακτήρας backslash (\) αρχίζει μια C-ειδή αλληλουχία διαφυγής ανάστροφη κάθετο, στην οποία ο συνδυασμός των ανάστροφη κάθετος και ακολουθώντας χαρακτήρα ( α) αντιπροσωπεύει μια ιδιαίτερη αξία byte. \ B είναι ένας backspace, \ f είναι μια ζωοτροφή μορφή, \ n είναι ένας newline, \ r είναι μια επιστροφή μεταφορά, \ t είναι μια καρτέλα. Επίσης υποστηρίζονται είναι \ ψηφία, όπου ψηφία αντιπροσωπεύει έναν οκταδικό τιμή byte, και \ xhexdigits, όπου hexdigits αντιπροσωπεύει μια δεκαεξαδική τιμή byte. (Είναι δική σας ευθύνη ότι οι ακολουθίες byte που δημιουργείτε είναι έγκυροι χαρακτήρες στο σύνολο χαρακτήρων του server κωδικοποίηση.) Κάθε άλλο χαρακτήρα μετά από μια ανάστροφη κάθετο λαμβάνεται κυριολεκτικά. Έτσι, για να περιλαμβάνει μια ανάστροφη κάθετο, να γράψει δύο ανάστροφες καθέτους (\\). Επίσης, ένα μόνο απόσπασμα μπορεί να συμπεριληφθεί σε μια κλωστή διαφυγής γράφοντας \», εκτός από το κανονικό τρόπο“”.

Απαντήθηκε 04/08/2008 στις 02:14
πηγή χρήστη

ψήφοι
5

Η προειδοποίηση έχει εκδοθεί από τη στιγμή που χρησιμοποιείτε κάθετοι σε χορδές σας. Αν θέλετε να αποφύγετε το μήνυμα, πληκτρολογήστε την εντολή αυτή «που standard_conforming_strings = σε?». Στη συνέχεια, χρησιμοποιήστε «Ε» πριν εγχόρδων σας, συμπεριλαμβανομένων κάθετοι που θέλετε PostgreSQL να intrepret.

Απαντήθηκε 17/02/2010 στις 00:51
πηγή χρήστη

ψήφοι
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 IGNORE  0 1
milen=> select * from EscapeTest;
          text
------------------------
 This will be inserted
  This will not be
(1 row)

milen=>
Απαντήθηκε 19/09/2008 στις 20:24
πηγή χρήστη

ψήφοι
2

Πραγματικά ηλίθια ερώτηση: Είστε σίγουροι ότι η σειρά είναι να περικοπεί, και όχι μόνο σπασμένα στο linebreak έχετε ορίσει (και πιθανόν να μην δείχνει το περιβάλλον σας); Δηλαδή, περιμένετε το πεδίο να εμφανίζεται ως

Αυτό θα εισαχθεί \ n Αυτό δεν θα είναι

ή

Αυτό θα πρέπει να εισαχθεί

Αυτό δεν θα είναι

Επίσης, ποια διεπαφή χρησιμοποιείτε; Είναι δυνατόν κάτι στην πορεία τρώει κάθετοι σας;

Απαντήθηκε 16/09/2008 στις 14:26
πηγή χρήστη

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