2012-05-28 12 views
17

H2は、引用符付きの名前と引用符なしの名前との間に違いをもたらすようです。同じように扱う方法はありますか?ここでH2は、引用符で囲まれた名前と引用されていない名前を同じものとして扱います。

CREATE TABLE test (dummy INT); 
CREATE TABLE "testquote" (dummy INT, "quotedDummy" INT); 

はクエリです:

は、ここで私がやったテストのだ

SELECT * FROM test; --work 
SELECT * FROM "test"; -- doesn't work 
SELECT * FROM "testquote"; --work 
SELECT * FROM testquote; --doesn't work 
SELECT dummy FROM "testquote"; --work 
SELECT quotedDummy FROM "testquote"; --doesn't work 
SELECT "quotedDummy" FROM "testquote"; --work 

私はこれらのクエリは、H2で動作させるために何ができますか?

+0

SQL標準を読んで、大文字を適切に使用する方法を学ぶと思います。引用符の効果は、デフォルトのマッピングが大文字から小文字にならないようにすることです。 – bmargulies

+0

@bmarguliesは大文字でもH2で動作しますか? H2のSQLドキュメントでそれを見つけることができません。 – Drahakar

+0

関数としてではなく、単にそれらを綴ります。 "TEST"はプレーンなテストにマッチするものです。 – bmargulies

答えて

29

Quotes names in H2 are case sensitive(SQL仕様の必要に応じて)それは、これが機能することを意味:

CREATE TABLE "testquote" (dummy INT, "quotedDummy" INT); 
SELECT * FROM "testquote"; 

が、これはしません:

SELECT * FROM "TestQuote"; 
SELECT * FROM "TESTQuote"; 
SELECT * FROM "TESTQUOTE"; 

Unquotes names are not case sensitive in H2。それらは通常、大文字に変換されます(Oracleおよび他のデータベースの場合のように)。それは文が

CREATE TABLE test (dummy INT); 
SELECT * FROM test; 

はそのH2で

CREATE TABLE "TEST" ("DUMMY" INT); 
SELECT * FROM "TEST"; 

と同じであることを意味すると、Oracleと同じように動作します。これは、MySQLやPostgreSQLなどの他のデータベースが識別子名をどのように扱うかでは少し異なります。 H2に互換性の機能があります。;DATABASE_TO_UPPER=FALSEをデータベースのURLに追加すると、引用符のない識別子は大文字に変換されず、大文字と小文字が区別されます。しかし、データベースを作成するとき、および使用するたびに既存のデータベースの設定を追加すると、既存のオブジェクトの識別子はすでに大文字に変換されています。

ところで、これはデータを意味するfunction UPPERとは関係ありません。あなたの質問は識別子に関するものであり、データに関するものではありません。

+0

あなたのお手伝いをしていただきありがとうございますM.ミュラー。 – Drahakar

+0

引用符付きの名前を使用して作成されたテーブルを大文字と小文字を区別しないように処理するようにh2に指示する方法はありますか?つまり ''テーブルを作成する ''テスト ''を実行すると、 'select * from test'が動作するでしょうか? –

+0

[互換性のセクション](http://www.h2database.com/html/features.html?highlight=IGNORECASE&search=ignorecase#compatibility)を見て、それは私が行った '; IGNORECASE = TRUE'を追加してテーブルを再作成し、ただし、引用符で囲まれたまま作成され、大文字と小文字が区別されます。 1.4.191を使用しています。 –

関連する問題