テーブルにエスケープ文字を挿入しようとすると、警告が表示されます。
例えば、以下のようになります。
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 を使用)
誰かこれを回避する方法を知っていますか?
部分的にテキストは挿入されますが、警告は発生します。
テキストの前に 'E'を付ける必要があるという議論を見つけたので、そのようにしました。
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');
かっこいいですね。
Eに関するドキュメントも見つけました。
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
PostgreSQLは標準SQLの拡張である、"escape"文字列定数も受け付けます。エスケープ文字列定数は、E'foo'のように、開始する単一引用符の直前に文字E(大文字でも小文字でも)を記述することで指定されます(行をまたいでエスケープ文字列定数を続ける場合は、最初の開始する引用符の前にのみEを記述してください)。エスケープ文字列の中で、バックスラッシュ文字(\)は、C言語のようなバックスラッシュエスケープシーケンスを開始し、バックスラッシュとそれに続く文字の組み合わせが、特殊なバイト値を表します。\b」はバックスペース、「f」はフォームフィード、「n」はニューライン、「r」はキャリッジリターン、「t」はタブを表します。また、Digitは8進数、Hexdigitsは16進数に対応しています。(ただし、作成したバイト列がサーバーの文字セットエンコーディングで有効な文字であることは、お客様の責任です)。バックスラッシュの後に続く他の文字はすべて文字通りに解釈されます。したがって、バックスラッシュ文字を含めるには、バックスラッシュを2つ書きます(\\)。また、エスケープ文字列に一重引用符を含めるには、通常の ''に加えて、\'を記述します。