SQLにおける「”」と「’」の違い 〜ダブルクォーテーション / シングルクォーテーション〜

スポンサーリンク

f:id:tkhstol-929:20180808225335p:plain

PosterSQLでは文字定数を「”」で括るとエラー

PostgreSQLで既存のテーブルにデータを挿入するために、以下のクエリ文を実行しました。

INSERT INTO table_name VALUES ("value1", "value2", "value3"); 

するとこれ、エラーで返ってきました。
(メッセージまでは覚えてませんが「value1なんてカラムは存在しないよ」的なことを言ってました)

ググってみると、ダブルクォーテーション「”」をシングルクォーテーション「'」にしないといけないようで、以下のようにしたら解決しました。

// ダブルクォーテーションをシングルクォーテーションに変更
INSERT INTO table_name VALUES ('value1', 'value2', 'value3'); 

「”」と「’」の違い

PostgreSQLなどの標準SQLでは、

  • シングルクォーテーションで囲う:文字列定数として扱う

  • ダブルクォーテーションで囲う:カラム名として扱う

    という仕様になっている(らしい)。

    'value1'value1という文字列として捉え、"value1"value1というカラムの名前として捉えられます。

    テーブルになにか文字列を挿入するときはシングルクォーテーションで囲ってやらないと、SQLが文字列として認識してくれないわけです。


    つまり、文字列定数をダブルクォーテーションで囲うな!ということです。

一方MySQLでは…

世の中に存在するほとんどのDBMS(Database Management System)はこの標準SQLの仕様に従います。 しかしMySQLだけは独自の仕様を持っています。MySQLでは、

  • シングルクォーテーション「'」で囲う:文字列定数として扱う

  • ダブルクォーテーション「"」で囲う:文字列定数として扱う

  • バッククォート「`」で囲う:カラム名として扱う


    という仕様になっています。


    シングルクォーテーションだろうがダブルクォーテーションだろうが、どっちで囲っても文字列定数として認識されます。カラム名として認識してほしいときはバッククォートを使わないといけません。

雑感

私が初めて触ったDBMSMySQLだったため、「”」と「’」の違いなんて全く気にしていませんでした。DBを初めて勉強するときは標準SQLの仕様に沿ったDBMSを使うべきだなあと感じました。

にほんブログ村 IT技術ブログへ
にほんブログ村