takami_hirokiの日記

2010-11-05

PostgreSQLでエスケープ文字を利用する場合の注意

以下の例のように「nonstandard use of \\ in a string literal」とかログに出ててビビッた。

SELECT position
       (
        'C:\\\\aaa/bbb/sample.txt' in '\\\\'
       )
FROM hoge  message: nonstandard use of \\ in a string literal

下記、引用の通り、エスケープ文字を利用している場合は、「直前にE」と付与することで問題なくなるようです。

PostgreSQLでは、また、"エスケープ"文字定数を受け付けます。これは標準SQLの拡張です。エスケープ文字定数は、開始単一引用符の直前にE(大文字でも小文字でもかまいません)を記述することで指定されます。例えばE'foo'です。

語彙の構成

上記の例を修正する場合は、以下のように修正します。

'C:\\\\aaa/bbb/sample.txt' in '\\\\'
 ↓
E'C:\\\\aaa/bbb/sample.txt' in E'\\\\'

但し、製品などの場合、自分で修正することが難しいかもしれません。その場合は、下記のように設定ファイルを修正する方法もあります。*1

escape_string_warning = on
 ↓
escape_string_warning = off

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/takami_hiroki/20101105/p1