Postgresql'de dize değişmezleri ve kaçış karakterleri

Bir tabloya kaçış karakteri eklemeye çalışmak bir uyarı ile sonuçlanır.

Örneğin:

create table EscapeTest (text varchar(50));

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

Uyarı üretir:

WARNING:  nonstandard use of escape in a string literal

(PSQL 8.2 kullanılıyor)

Bunu nasıl aşacağımızı bilen var mı?

Çözüm

Kısmen. Metin eklenir, ancak uyarı yine de oluşturulur.

Metnin önüne 'E' eklenmesi gerektiğini belirten bir tartışma buldum:

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

Bu, uyarıyı bastırdı, ancak metin hala doğru şekilde döndürülmüyordu. Michael'ın önerdiği gibi ek eğik çizgi eklediğimde işe yaradı.

Bu şekilde:

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

Güzel.

Ayrıca E ile ilgili belgeleri de buldum:

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

PostgreSQL ayrıca SQL standardının bir uzantısı olan "escape" dize sabitlerini de kabul eder. Bir kaçış dizgesi sabiti, açılış tek tırnak işaretinden hemen önce E harfi (büyük veya küçük harf) yazılarak belirtilir, örneğin E'foo'. (Bir kaçış dizgesi sabitini satırlar boyunca devam ettirirken, sadece ilk açılış tırnak işaretinden önce E yazın). Bir kaçış dizesi içinde, bir ters eğik çizgi karakteri (\), ters eğik çizgi ve takip eden karakter(ler)in kombinasyonunun özel bir bayt değerini temsil ettiği C benzeri bir ters eğik çizgi kaçış dizisini başlatır. \b bir geri boşluk, \f bir form besleme, \n bir satırsonu, \r bir satırbaşı, \t bir sekmedir. Ayrıca, rakamların sekizli bayt değerini temsil ettiği \digits ve hexdigits'in onaltılı bayt değerini temsil ettiği \xhexdigits de desteklenir. (Oluşturduğunuz bayt dizilerinin sunucu karakter kümesi kodlamasında geçerli karakterler olması sizin sorumluluğunuzdadır). Ters eğik çizgiyi izleyen diğer karakterler harfi harfine alınır. Bu nedenle, bir ters eğik çizgi karakteri eklemek için iki ters eğik çizgi yazın (\\). Ayrıca, normal '' yöntemine ek olarak \' yazılarak bir kaçış dizesine tek bir tırnak işareti dahil edilebilir.

Yorumlar (0)

Gerçekten aptalca bir soru: Dizenin kesildiğinden ve sadece belirttiğiniz satırsonunda kırılmadığından (ve muhtemelen arayüzünüzde gösterilmediğinden) emin misiniz? Yani, alanın şu şekilde gösterilmesini bekliyor musunuz

Bu eklenecektir \n Bu eklenmeyecektir olmak

veya

Bu eklenecektir

Bu olmayacak

Ayrıca, hangi arayüzü kullanıyorsunuz? Yol boyunca bir şey ters eğik çizgilerinizi yiyor olabilir mi?

Yorumlar (1)