2012-11-16 21 views
5

私はほんの少しのMySQL's gotchasに噛まれているので、かなりのMySQL(5.1)使用の後でPostgres(9.2)に慣れようとしています。しかし、私はヒットは誰も確信している私はits gotchasの一つに走ったのPostgresとの私の最初の5分、中:デフォルトではなぜPostgreSQLはすべて小文字にするのですか?

  • 、PostgreSQLは小文字に引用されていないすべてのものに変換します。

明白な回避策のカップルがありますので、これは、私には取引の大きすぎるではありません。

  • は、引用符内のすべてをカプセル化します。
  • すべてに小文字で名前を付けることを許可します。

しかし、なぜ私は不思議に思っています。この設計上の決定がどれほどの競合を抱いているかを考えてみると、私はインターネット上で何の根拠も見つけられなかったことに驚いています。 Postgresがこのように設計された理由について、誰かが徹底的な説明、またはいくつかの開発者マニフェストへのリンクを持っていますか?興味ある。

+0

これについてお尋ねしますか? http://stackoverflow.com/questions/153944/is-sql-syntax-case-sensitive?rq=1 –

+3

AFAIKでは、引用符で囲まれていない識別子は大文字に変換され、[PostgreSQLは小文字に変換されます](http ://stackoverflow.com/a/8736088/479863)をご覧ください。大文字または小文字に折りたたむことは、あなたの識別子だけを引用している場合を除いて重要ではありません。しかし、あなたがそれをしているなら、あなたが得るものに値するでしょう。あなたは 'テーブルパンケーキ(...)'と 'select * from Pancakes'を作成することを歓迎しています。パンケーキ"(...)を作成せずに、パンケーキから "*選択しようとしてください。 MySQLの人々は、すべての言い回しを引用するこの奇妙な習慣を持っているように見えます。その習慣を失います。 –

+0

@muistooshort私は、大文字小文字を大文字小文字にする必要があるかどうかをSQL仕様で指定していないと主張してきました。あなたは特にそれが大文字に折りたたまれるように指定されているか知っていますか? (私は参考文献を探していますが、現時点ではそれほど有用ではないことが分かりません)。 –

答えて

6

SQL標準では、引用符で囲まれていない識別子を大文字にすることを指定しています。このように多くの他のRDBMSが標準に従っています。 FirebirdとOracleの両方がそうです。これは、識別子マッチングがデフォルトで大文字と小文字を区別しないことを意味します。この動作は、基本クエリの互換性に関して非常に重要です。これに関して、MySQLの動作は真の異常値です。

しかし、PostgreSQLは小文字に折りたたんで標準から逸脱しています。あなたがcuing構文のために大文字小文字を使うことができるので、これがより読みやすいとみなされる一般的な理由があります。次のようなものがあります。

SELECT foo FROM bar WHERE baz = 1; 

これは、ケースが下に折り畳まれると、より自然です。代替の折り畳み反対は次のようになります。以前の動作のような一般的に

select FOO from BAR where BAZ = 1; 

は他のケースに折り畳みながら、より優れたSQL操作を強調becasue(小文字に折り)動作をデ強調および識別子を強調しています。多くのクエリの複雑さを考えると、私は前者がうまくいくと思います。

一般的に私がpostgresメーリングリストで見た多くの議論は、誰もが標準的な行動が壊れていることに同意しているということでした。上記のことが私の問題の理解です。

+0

私はこの文脈の文脈を理解していません。この点に関しては、MySQLの動作は真の異常値です。 「MySQL」ではなく「Postgres」を意味しましたか?あるいは、私が見逃した「MySQL」の別のコンテキストがここにありますか? –

+0

MySQLのgotchasとPostgreSQLの問題を参照してください。 –

関連する問題