2016-07-13 40 views
2

データをオンザフライで生成したスキーマにインポートするツールを開発しています。したがって、テーブル名や列名がどのように見えるかはほとんど制御できません。私は最近、同じ名前を持っているが大文字と小文字が異なる2つの列をテーブルに作成する問題にぶつかった。問題は、この最も簡単なDDL操作で実証することができ:二重引用符を付けるとH2テーブルの列が大文字小文字を区別しない

CREATE TABLE "a" (
    "c1" integer, 
    "C1" integer 
) 

これは、とのプログラムだけでなく、H2コンソールに私のために失敗します。

重複列名「C1」; SQL文:「」(「C1」 整数、「C1」の整数)のテーブルを作成

これは、例えばPostgreSQLでは正常に動作していると私はそれがSQLの仕様として動作するはずだと思うの値は大文字と小文字の区別が必要です二重引用符。

私は現在、メモリ内のh2データベースを使用しています。

EDITは:それは理由は、接続が大文字と小文字を区別しませんH2名の中で、この動作

+0

歓声を引き起こしたオプションDATABASE_TO_UPPER =偽で設立された彼が正しいと、私はEoinSを受け入れ –

+0

をスポッティングためのおかげで答えて、列は大文字と小文字が区別され、彼は機能が働くことをdemontrated 。 –

+0

ありがとう@JanZyka、私は問題が何だったのかはっきりしていませんでしたが、SQLが実行される前の何か、つまり前処理の問題であると考えました。もっと具体的になるように私の答えを更新し、将来のユーザーが最初に見ることができるように接続を言及します – EoinS

答えて

1

を引き起こしオプションDATABASE_TO_UPPER=falseで確立したなくなります。

H2 docs

...しかし...

引用符で囲まれた名前は、大文字と小文字が区別され、スペースを含めることができます。

H2 docs of Quoted Names

私はちょうどH2のローカルインスタンスにこの正確な例を実行し、それがうまく働きました。

create table p ("c1" integer, "C1" integer); 
insert into p values (1,2); 
select * from p; 

SQLがH2で実行される前に変更されていると思います。 SQLが実行される前にすべてが大文字にされている可能性があります。あなたの更新毎

接続は、この動作に

+0

ありがとう、私にとってはそれはありません。あなたが使っているH2バージョンについて詳しく教えてもらえますか?私はクエリを実行するh2のWebコンソールを使用しています、h2はメモリ内のモードでバージョン1.4.190を実行しています –

+0

努力をいただきありがとうございます、私の更新をお待ちください。解決済み –

関連する問題