2012-05-28 5 views
17

H2 scheint einen Unterschied zwischen Name mit Zitat und Name ohne Zitat zu machen. Gibt es eine Möglichkeit, sie so zu behandeln?Machen H2 behandelt zitierten Namen und nicht abgekürzten Namen als die gleichen

Hier ist die Tests, die ich getan habe:

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

Hier sind die Anfragen:

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 

Was kann ich tun, diese Abfragen arbeiten mit H2 zu machen?

+0

Lesen Sie den SQL-Standard und lernen Sie, UPPERCASE als geeignet zu verwenden, denke ich. Die Wirkung der Anführungszeichen soll verhindern, dass die Standardzuordnung von klein nach groß erfolgt. – bmargulies

+0

@bmargulies funktioniert "GROßBILD" sogar mit H2? Kann nicht in der SQL-Dokumentation von H2 gefunden werden. – Drahakar

+0

Nicht als eine Funktion, buchstabieren Sie sie einfach aus. "TEST" entspricht dem einfachen Test. – bmargulies

Antwort

29

Quotes names in H2 are case sensitive, wie von der SQL-Spezifikation gefordert. Das bedeutet, dass dies funktionieren wird:

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

aber diese werden nicht:

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

Unquotes names are not case sensitive in H2. Sie werden normalerweise in Großbuchstaben konvertiert (wie in Oracle und anderen Datenbanken). Das bedeutet, dass die Aussagen

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

sind die gleichen wie

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

In der H2 in der gleichen Weise wie Oracle verhält. Dies ist etwas anders, wenn andere Datenbanken wie MySQL und PostgreSQL mit Bezeichnernamen umgehen. H2 verfügt über eine Kompatibilitätsfunktion: Wenn Sie ;DATABASE_TO_UPPER=FALSE an die Datenbank-URL anhängen, werden Unquotes-Bezeichner nicht in Großbuchstaben konvertiert, das heißt, sie werden ebenfalls zwischen Groß- und Kleinschreibung unterschieden. Sie müssen dies jedoch beim Erstellen der Datenbank und bei jeder Verwendung anhängen (wenn Sie die Einstellung für vorhandene Datenbanken anhängen, werden die Bezeichner vorhandener Objekte bereits in Großbuchstaben konvertiert).

Das hat übrigens nichts mit der function UPPER zu tun, die für Daten gedacht ist. Ihre Frage bezieht sich auf Kennungen, nicht auf Daten.

+0

Danke für Ihre Hilfe M. Müller. – Drahakar

+0

Gibt es eine Möglichkeit, h2 zu veranlassen, Tabellen zu behandeln, die mit zitierten Namen erstellt wurden, um Groß- und Kleinschreibung zu vermeiden? wenn ich 'create table" test "' erlaube 'select * from test' zu funktionieren? –

+0

Betrachtet man [den Kompatibilitätsabschnitt] (http://www.h2database.com/html/features.html?highlight=IGNORECASE&search=ignorecase#compatibility) beschreibt es das Anhängen '; IGNORECASE = TRUE', was ich getan habe und neu erstellte Tabellen, Sie werden jedoch immer noch so erstellt, wie sie in Anführungszeichen stehen. Verwenden von 1.4.191. –