アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

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