My Yahoo!に追加 Yahoo!ブックマークに登録

先日インストールしたPostgreSQLですが、ちょこっとハマった箇所があったのでメモ書きです。

MS系じゃない言語でプログラムを書いたことがある人は経験があるかと思いますが、文字列の定義をするときはふつ〜の言語は「"」(ダブルクォート)や「'」(シングルクォート)で文字列を囲みます。

で、囲った中で「"」(ダブルクォート)や「'」(シングルクォート)を使いたい!と思ったときは、「"」(ダブルクォート)や「'」(シングルクォート)の意味をなくして単なる文字列として使いたい、つまり「"」(ダブルクォート)や「'」(シングルクォート)をエスケープします。

ちなみにMS系の言語だと同じ文字を二つ重ねるとエスケープ処理になります(「""」とか「''」とか)。

その時の文字列の書き方はエスケープをしたい文字列の前に「\」(本当はバックスラッシュ)を書いて「\"」や「\'」のようにしますよね。
つまりこんな感じ
String hoge = "「\"」をエスケープして文字列変数を定義してみた";
こうすると、文字列を実際に表示したりすると
「"」をエスケープして文字列変数を定義してみた
こんな感じにバックスラッシュが消えて「"」だけになります。

さて、PostgreSQLも基本は同じなのですがなぜかエスケープする場合は文字列の前に「E」(小文字のeでもいいらしい)をつける必要があるそうです。

つまりこんな感じ
SELECT * FROM HOGE WHERE FUGA = E'「\'」をエスケープして文字列変数を定義してみた';
「E」をつけないと
HINT:  Use '' to write quotes in strings, or use the escape string syntax (E'...').
こんな感じのヒント(警告?エラー?)が出てきます。
今回の例だと、このメッセージに書かれているように「''」でも問題ないですね。
例えば改行コードとかを入力したいとかに使いましょう。

ちなみに「\」でエスケープする方法って標準SQLの拡張らしい。
ほかのSQLではエスケープできないのかね?
関連するBlogはこちらからどうぞ〜! → 人気ブログランキングへにほんブログ村 IT技術ブログ Linuxへ