2016-07-13 3 views
2

Ich entwickle ein Werkzeug, das Daten in on-the-fly generierte Schema importiert. Daher habe ich wenig Kontrolle darüber, wie die Tabellen- oder Spaltennamen aussehen werden. Ich bin kürzlich auf ein Problem mit dem Erstellen von 2 Spalten in der Tabelle gestoßen, die den gleichen Namen, aber andere Groß-/Kleinschreibung haben. Das Problem bei dieser einfachstenen DDL-Operation nachgewiesen werden kann: als h2 KonsoleH2-Tabellenspalten nicht berücksichtigt Fall, wenn double-quoted

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

Dies scheitert auch für mich in dem Programm mit:

doppelte Spaltenname "C1"; SQL-Anweisung: create table „a“ („c1“ integer „C1“ integer)

Dies funktioniert in PostgreSQL zum Beispiel gut und ich denke, es sollte als die SQL-Spezifikation arbeiten erfordert Groß- und Kleinschreibung, wenn Werte doppelt zitiert.

Ich verwende derzeit In-Memory-H2-Datenbank.

EDIT: Es läuft der Grund heraus wurde die Verbindung mit der Option festgelegt wurde DATABASE_TO_UPPER=false, die dieses Verhalten

+0

prost, vielen Dank für –

+0

Spek ich EoinS akzeptierte Antwort, wie er richtig ist, die Säulen sind Groß- und Kleinschreibung und er demontrated, dass die Funktionalität Werke . –

+0

Danke @JanZyka, ich war mir nicht sicher, was genau das Problem war, aber ich stellte fest, dass es etwas war, bevor die SQL ausgeführt wurde, ein Vorverarbeitungsproblem. Ich werde meine Antwort aktualisieren, um spezifischer zu sein und die Verbindung zu erwähnen, so dass zukünftige Benutzer das zuerst betrachten können – EoinS

Antwort

1

In H2 Namen verursacht werden, nicht beachtet werden.

H2 docs

... aber ...

Zitiert Namen sind Groß- und Kleinschreibung und Leerzeichen enthalten.

H2 docs of Quoted Names

Ich lief genau dieses Beispiel in einer lokalen Instanz von H2 und es funktionierte gut.

Ich denke, dass Ihr SQL geändert wird, bevor es in H2 ausgeführt wird. Vor der SQL-Ausführung kann alles aktiviert werden.

Per Ihr Update wurde die Verbindung mit der Option DATABASE_TO_UPPER etabliert = false, die dieses Verhalten verursacht

+0

Vielen Dank, für mich tut es aber nicht. Würde es Ihnen etwas ausmachen, die H2-Version zu erläutern, die Sie verwenden? Ich benutze h2 Web-Konsole, um die Abfrage auszuführen, h2 läuft im In-Memory-Modus, Version 1.4.190 –

+0

Danke für die Mühe, bitte se mein Update. Gelöst –

Verwandte Themen