PostgreSQL (≒ 標準SQL)での、'シングルクォーテーション'と"ダブルクォーテーション"の使い分けについて
最近『SQL第2版 ゼロからはじめるデータベース操作』を読んでいたんですが、「日本語は"ダブルクォーテーション"で囲む」という内容に疑問を持ちました。
一体どんなものを'シングルクォーテーション'で囲み、"ダブルクォーテーション"で囲むのか?
調べているうちに「別に日本語をダブルクォーテーションで囲む必要性なくない?」となったので、以下調べた内容をまとめました。
'シングルクォーテーション'と"ダブルクォーテーション"の違い
-
基本、文字列は’シングルクォーテーション’で記述する
‘1+2’
- 値のみの場合、シングルクォーテーションはつけない
- 🌟シングルクォーテーションは文字列定数として扱う
-
一部の例外があるときに”ダブルクォーテーション”を使う
- 二重引用符という
- 🌟ダブルクォーテーションはテーブル名・列名・カラム名などオブジェクト名として扱う
- テーブルにデータを挿入したいとき、文字列を””で囲んでしまうと「そんなカラムはない」とエラーが出てしまう
では、一部の例外とはどのようなケースなのか?
- 予約語:DATABASE, SELECTなど、プログラムが識別する識別名は、文字列として定義ができない
- “DATABASE”ならOK
- シングルクォーテーションを文字列として扱いたい
- "Porun’s Tail"
- シングルクォーテーション内でダブルクォーテーションを使いたい
- ‘"Porun" is the name of a character that appears in “ふたりはプリキュア".’
- 大文字と小文字を区別したテーブル名を作りたい
- ”table-1” ≠ “Table-1"
つまり、プログラムがコードを読んで困惑するようなときに””を使うべし!
調べてわかったこと
少なくともPostgreSQLでは、日本語をダブルクォーテーションで書く必要性はなさそうです!
日本語はこの例外に当てはまらないため、シングルクォーテーションで囲んでも問題なく動くみたいです。
※MySQLの場合は書き方がそもそも違うのでダブルクォーテーションを使うこともあります(違いは今回省略します)
それどころか、最近のPostgreSQL識別子(カラム名とか)はクォートなしで設定できるらしいです。
PostgreSQL の文字列型についてまとめてみた
ただ、そう思って調子に乗っているとエラーにぶち当たりそうなので、間違いがございましたらご指摘いただけますと幸いです!
【すべての参考記事に感謝申し上げます!】
PostgreSQL の文字列型についてまとめてみた
SQLにおけるダブルクォーテーションとシングルクォーテーションの使い方
【SQL】シングルクォーテーションについて解説。クォーテーション毎の違いやDBMSの仕様について。
オススメ!OSS-DB情報 第3回 SQL と引用符
えっ、まだPostgreSQLでダブルクォーテーション使ってるの?
Discussion