PostgreSQLで「'」(シングルクォーテーション/単一引用符)をエスケープ処理する方法

PostgreSQLで「'」(シングルクォーテーション/単一引用符)をエスケープ処理する方法を以下にメモしておく。

■SQLの実行に失敗する例
insert into nobuneko_dictionary (dic_name,dic_name2) values ('Foundation's Edge','ファウンデーションの彼方へ');
このSQLを実行すると、以下のようなエラーメッセージが表示される。

ERROR: syntax error at or near "s"
LINE 3: ...ictionary (dic_name,dic_name2) values ('Foundation's Edge','...
^
********** エラー **********
ERROR: syntax error at or near "s"
SQLステート:42601
文字:112

「Foundation's Edge」を「'」(シングルクォーテーション/単一引用符)で囲んでいるのだが、その囲んだ中に「'」がそのままあることがエラーの原因。エラーを回避し、SQLの実行を成功させるには、「'」をエスケープ処理する必要がある。

■SQLの実行に成功する例1
insert into nobuneko_dictionary (dic_name,dic_name2) values ('Foundation''s Edge','ファウンデーションの彼方へ');
※「'」の前に「'」を付ける。
 つまり、「'Foundation's Edge'」を「'Foundation''s Edge'」とする。

■SQLの実行に成功する例2
insert into nobuneko_dictionary (dic_name,dic_name2) values (E'Foundation\'s Edge','ファウンデーションの彼方へ');
※「E'...\'...'」のように文字列を囲む「'」の前に「E」(大文字でも小文字でもよいらしい)を付け、囲まれた文字列の中にある「'」の前には「\」(Windowsなら半角の¥マーク、Linuxならバックスラッシュ)を付ける。
 つまり、「'Foundation's Edge'」を「E'Foundation\'s Edge'」とする。

■SQLの実行に成功するがエラーが表示される例
insert into nobuneko_dictionary (dic_name,dic_name2) values ('Foundation\'s Edge','ファウンデーションの彼方へ');
※上記の「SQLの実行に成功する例2」との違いは、文字列を囲む「'」の前に「E」を記述しないこと。
 この例の場合、SQLの実行には成功するが、以下のエラーメッセージが表示される。

WARNING: nonstandard use of \' in a string literal
LINE 4: ... nobuneko_dictionary (dic_name,dic_name2) values ('Foundatio...
^
HINT: Use '' to write quotes in strings, or use the escape string syntax (E'...').
クエリーは、成功しました: 1 行の影響があり, 実行時間は、16 ミリ秒でした。

このエラーメッセージによると、「\'」といった書き方は非標準とのこと。
ヒント(HINT)を参考にすると、「'」をエスケープする場合は、「\'」ではなく、「''」のように「'」を2つ連続で記載するか、「E'...\'...'」とすればよいようだ。

この記事のメインカテゴリ:
SNS:
この記事に付けられているタグ: PostgreSQL

マルカン どこでもツメとぎタワーS 猫用


Anker PowerCore 10000 (10000mAh 最小最軽量 大容量 モバイルバッテリー) iPhone&Android対応 *2016年8月末時点 A1263011


VAIO ノートパソコン VAIO S11 シルバーSIMフリーモデル(Office Home&Business Premium) VJS11190611S


Nintendo Switch Joy-Con (L) ネオンブルー/ (R) ネオンレッド


PlayStation 4 Pro ジェット・ブラック 1TB (CUH-7000BB01)


ネコヅメのよる


泉精器製作所 毛玉取り器 毛玉カット とるとる ピンク KC-NB34-P


IKSTAR 新世代 人間工学設計 低反発まくら 首・頭・肩をやさしく支える健康枕 いびき防止 頸椎サポート 頭痛改善 肩こり対策 快眠 洗える ピロー


Kindle Paperwhite 32GB、マンガモデル、Wi-Fi 、ブラック