Postgresql में स्ट्रिंग अक्षर और बचने के पात्र

एक तालिका में एक बचने के चरित्र को सम्मिलित करने का प्रयास चेतावनी में होता है।

उदाहरण के लिए:

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 का उपयोग करना )

किसी को पता है कि इस के आसपास कैसे जाना है?

0
जोड़ा संपादित
विचारों: 1

4 उत्तर

ठंडा।

मुझे ई के बारे में दस्तावेज भी मिला:

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

PostgreSQL भी "से बचने" स्ट्रिंग स्थिरांक स्वीकार करता है, जो SQL मानक का विस्तार है। उद्घाटन सिंगल कोट के ठीक पहले अक्षर ई (ऊपरी या निचला मामला) लिखकर एक एस्केप स्ट्रिंग स्थिर निर्दिष्ट किया जाता है, उदा। E'foo '। (लाइनों पर निरंतर एक पलायन स्ट्रिंग जारी रखते समय, पहले उद्घाटन उद्धरण से पहले ई लिखें।) एक बचने की स्ट्रिंग के भीतर, बैकस्लैश कैरेक्टर (\) सी-जैसे बैकस्लैश एस्केप अनुक्रम शुरू करता है, जिसमें बैकस्लैश और निम्न वर्ण का संयोजन होता है ( एस) एक विशेष बाइट मूल्य का प्रतिनिधित्व करता है। \ b एक बैकस्पेस है, \ f एक फॉर्म फीड है, \ n एक नई लाइन है, \ r एक कैरिज रिटर्न है, \ t एक टैब है। यह भी समर्थित है \ अंक, जहां अंक एक ऑक्टल बाइट मान का प्रतिनिधित्व करते हैं, और \ xhexdigits, जहां हेक्सडिजिट हेक्साडेसिमल बाइट मान का प्रतिनिधित्व करता है। (यह आपकी ज़िम्मेदारी है कि आपके द्वारा बनाए गए बाइट अनुक्रम सर्वर वर्ण सेट एन्कोडिंग में मान्य वर्ण हैं।) बैकस्लैश के बाद कोई अन्य वर्ण शाब्दिक रूप से लिया जाता है। इस प्रकार, बैकस्लैश चरित्र को शामिल करने के लिए, दो बैकस्लैश लिखें (\\)। साथ ही, एक एकल उद्धरण को 'सामान्य तरीके के अलावा' 'लिखकर' बचने के स्ट्रिंग में शामिल किया जा सकता है।

0
जोड़ा

आंशिक रूप से। पाठ डाला गया है, लेकिन चेतावनी अभी भी उत्पन्न हुई है।

मुझे एक ऐसी चर्चा मिली जो 'ई' से पहले होने वाली पाठ को इंगित करती है, जैसे:

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

इसने चेतावनी को दबा दिया, लेकिन पाठ अभी भी सही ढंग से वापस नहीं किया जा रहा था। जब मैंने माइकल के सुझाव के रूप में अतिरिक्त स्लैश जोड़ा, तो यह काम किया।

जैसे की:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
0
जोड़ा
ध्यान दें कि PostgreSQL 9.0 E'testing \\ x20double-slash 'पर मूल्यांकन' परीक्षण \\ x20double-slash 'के रूप में मूल्यांकन किया जाएगा, इसलिए केवल एकल-स्लैश दृष्टिकोण E'string' शैली अक्षर के लिए काम करता है
जोड़ा लेखक Alexander, स्रोत
PostgreSQL 9.2 के लिए देखें: postgresql .org / docs / 9.2 / इंटरैक्टिव / & hellip;
जोड़ा लेखक Pitt, स्रोत
psql \ copy नोट: मैंने पाया कि E '\ n' को एक नई लाइन के बजाय '\ n' के रूप में फ़ाइल करने के लिए लिखा गया था। इसे क्वेरी तर्क में psql की `\ copy 'मेटा-कमांड में प्रयोग किया जाता है।
जोड़ा लेखक Stew, स्रोत

मुझे पोस्टग्रेज़ के इनपुट पर आपके डेटा को छोटा करने के लिए यह बेहद असंभव लगता है - यह या तो इसे अस्वीकार करता है या इसे स्टोर करता है।

[email protected]:~$ 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=>
0
जोड़ा
कृपया दिए गए टेस्ट केस का प्रयास करें और आप इसे अपने लिए देखेंगे।
जोड़ा लेखक rjohnston, स्रोत
दिलचस्प, ऐसा लगता है कि समस्या जेडीबीसी चालक में थी, क्योंकि डेटाबेस से बाहर आने वाला पाठ बहुत निश्चित रूप से छोटा कर दिया गया था ...
जोड़ा लेखक rjohnston, स्रोत
पोस्टग्रेज़ करता है कुछ विशिष्ट स्थितियों में इनपुट पर डेटा को छोटा कर देता है। उदाहरण के लिए, इनपुट वर्ण भिन्न (4) कॉलम को रिक्त स्थान को छोटा कर देगा और मान" परीक्षण "संग्रहित करेगा। एक सामान्य नियम के रूप में, हालांकि, आप मान सकते हैं कि पोस्टग्रेस आपके डेटा को छोटा करने के बजाय त्रुटि देगा।
जोड़ा लेखक Bryson, स्रोत

चेतावनी जारी की जाती है क्योंकि आप अपने तारों में बैकस्लैश का उपयोग कर रहे हैं। अगर आप संदेश से बचना चाहते हैं, तो इस कमांड को टाइप करें "मानक_कॉन्फोर्मिंग_स्ट्रिंग्स = ऑन सेट करें"; फिर अपनी स्ट्रिंग से पहले "ई" का उपयोग करें जिसमें बैकस्लेश शामिल हैं जिन्हें आप postgresql intrepret करना चाहते हैं।

0
जोड़ा
मैं एसक्यूएल कथन में तारों का जिक्र कर रहा था, जबकि अब आप एक psql कमांड का उपयोग कर रहे हैं। क्या आपको \ copy की बजाय COPY कमांड का उपयोग करके एक ही त्रुटि मिलती है?
जोड़ा लेखक eppesuig, स्रोत
यह सही जवाब है। पीजी के आधुनिक संस्करण अब इसे चालू करने के लिए डिफ़ॉल्ट हैं।
जोड़ा लेखक jpmc26, स्रोत