PostgreSQLのエスケープ
めっちゃくちゃどうでもいいんですけど、
いつも何故だか「エスケープ」と「エンコード」という単語がごっちゃになる。
しかも大体の場合、
エスケープについて調べたいときは
「なんだっけ…あの…エンコードじゃないやつ…」となり
エンコードについて調べたいときは
「なんだっけ…あの…エスケープじゃないやつ…」となる。
困る。
あと、実はもう一つごっちゃになる単語があった気がするのだが今はそれが出てこないモード。
それはともかくとして、PostgreSQLのエスケープについて調べたり試したりしたのをメモ。
参考:
PostgreSQLの文字列のエスケープ: ぷ~ろぐ
とりあえず普通の文字列
SELECT 'hoge'; -- hoge
シングルクォートを文字として扱う
MySQLと違って、文字列はシングルクォートで囲む必要があるので
シングルクォートは必ずエスケープが必要になります。
SELECT 'h''oge'; -- h'oge SELECT 'h'oge'; -- (エラーになる)
このように、シングルクォートはシングルクォートでエスケープできます。
バックスラッシュではエスケープできません。
SELECT 'h\'oge'; -- (エラーになる)
そもそもバックスラッシュは普通の文字として扱える
バックスラッシュはそのまま文字として使うことができます。
SELECT 'h\oge'; -- h\oge SELECT 'h\no\tge'; -- h\no\tge
改行やタブ文字を入れたいときは…
文字列の前に「E」を付加することで、「\n」「\t」などが使えるようになります。
ついでにシングルクォートもバックスラッシュでエスケープできます。
SELECT E'h\no\tge'; -- h(改行)o(タブ文字)ge SELECT E'h''oge'; -- h'oge SELECT E'h\'oge'; -- h'oge