2011-07-07 3 views
1

私の会社では、MySQL 5からPostgreSQL 8.4に切り替えるのはプロジェクトのフロントエンドがPHPだからサーバー部分はLISPなのでMySQLの準備されたステートメントに問題があります。MySQL 5からPostgreSQL 8.4まで、大文字と小文字を区別する規約、PostgreSQLと一緒に保存する

これはちょうど理由の1つで、現在私が管理しているものではありませんので、現在のところ、マイグレーションする必要がある表が約12個あるDBがあります。これはMySQLであり、次のような大文字と小文字を区別するSQL規約を使用しています。

すべてのテーブルが複数のテーブル名(複数ではありません)で始まり、単語は大文字で区切られます。 私はPHP PDOをフロントエンドで使用していますが、SELECT * FROM Postsのようなクエリはたくさんありますが、PostgreSQLではうまく機能していますが、PostgreSQLではうまく機能しています。 SELECT * FROM "Posts"であるか、移行後のテーブルがPostgreSQLで小文字になるはずです(二重引用符が気になります)。

両方の解決策がうまくいけば、私は3番目のものに満足しています(以前のようにテーブルを維持する方法を見つけて、まだPostgreSQLで動作しているなど)。しかし、それが可能ではない場合、私はここからそれをする方法をアドバイスしていただければ幸いです。例えば、大文字と小文字を区別するようにテーブルを作成し、テーブルとカラム名を二重引用符で囲んでdbに問い合わせ、現在のクエリを変更するか、 post_title、post_contentなどの単語間の区切り記号としてアンダースコアを使用し、すべての現在のクエリを変更します。長期的にはこれが最善のことであることが最も重要です(プロジェクトが成長する)。

+0

PostgreSQLでどのようにテーブルを作成しましたか?あなたはテーブルと列の名前を偶然引用しましたか? –

+1

@ muのステートメントを明確にする:テーブル名を引用せずにテーブルを作成すると、PostgreSQLはテーブル名の大文字と小文字を区別しない検索を自動的に実行するはずです。テーブルを作成して識別子(「MyTable」など)を引用した場合、PostgreSQLはテーブル名の大文字と小文字を区別したリテラル一致を実行します。あなたの識別子を引用しないでください。 – Sean

答えて

4

すべての小文字とアンダースコアに進むと、長期的には不満が少なくなります。 SQL仕様では、識別子を引用符で囲まないと、大文字に変換されます。 PostgreSQLはこれを行いますが、読みやすくするため小文字に変換します。しかし、大文字と小文字の区別された大文字小文字の識別子を引用し始めると、それを続ける必要があります。

文中に引用符で囲まれていない大文字小文字の区別を使用して、db内のすべての小文字の識別子にヒットすることができます。私。その中のtable_nameを持つdbは、select * from Table_Nameでヒットすることができます。これはすべて小文字になります。

+0

これは、後で必要となる場合があるため、すべてのSQLベースのデータベースシステムで機能するので、優れたアドバイスです。 SQL Serverがどのように引用しているかを見てください - SQL引用を必要としないという習慣を試してみるのは良い理由です。 ;) –

+0

ありがとうございました。私は小文字にすると大文字と小文字を混在させることができますが、テーブル/列が大文字と小文字の混在している場合は、引用符をつけずに大文字と小文字を区別することはできません。 – ddinchev

関連する問題