2012-05-28 22 views
17

H2, tırnaksız ve tırnaksız isim arasında bir fark yaratıyor gibi görünüyor. Onlara aynı şekilde davranmanın bir yolu var mı? İşteH2 ismini al ve aynı isimle aynı olmayan isimle yapın

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

sorgusu::

İşte yaptığım testler var

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 

Ben bu sorgular H2 ile çalışmasını sağlamak için neler yapabiliriz? SQL belirtiminin gerektirdiği gibi,

+0

SQL standardını okuyun ve UPPERCASE kullanmayı uygun şekilde kullanmayı öğrenin. Tırnakların etkisi, varsayılan haritalamanın alttan büyük harfe geçmesini önlemektir. – bmargulies

+0

@bmargulies, "UPPERCASE" bile H2 ile çalışıyor mu? H2'nin SQL belgelerinde bulamıyor. – Drahakar

+0

Bir işlev olarak değil, sadece onları yazınız. Düz testi eşleştiren "TEST" dir. – bmargulies

cevap

29

Quotes names in H2 are case sensitive.

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

ama bu olmaz: O bu çalışacağı anlamına gelir

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

Unquotes names are not case sensitive in H2. Normalde büyük harfe dönüştürülürler (Oracle ve diğer veritabanlarında olduğu gibi). O H2 Oracle gibi aynı şekilde davranması ise bu ifadeleri

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

demektir

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

aynıdır. Bu, MySQL ve PostgreSQL gibi diğer veritabanlarının tanımlayıcı isimleriyle nasıl baş ettikleri konusunda biraz farklıdır. H2 bir uyumluluk özelliğine sahiptir: Veritabanı URL'sine ;DATABASE_TO_UPPER=FALSE eklerseniz, tanımlayıcılar büyük harflere dönüştürülmez, yani büyük/küçük harfe duyarlıdırlar. Ancak, veritabanını oluştururken bunu eklemeniz gerekir ve her kullandığınızda (varolan veritabanlarının ayarlarını eklerseniz, varolan nesnelerin tanımlayıcıları zaten büyük harfe dönüştürülür). Bu arada, bunun veri için anlamı olan function UPPER ile ilgisi yoktur. Sorunuz veri değil tanımlayıcılarla ilgilidir.

+0

Yardımlarınız için teşekkürler M. Mueller. – Drahakar

+0

H2'ye, büyük harf duyarlı olması için alıntı yapılan isimleri kullanarak oluşturulan tabloları işlemek için bir yol var mı? yani "tablo" testi oluşturursam "testten * test etmeyi" seçmeye izin verecek? –

+0

[Uyumluluk bölümü] 'ne (http://www.h2database.com/html/features.html?highlight=IGNORECASE&search=ignorecase#compatibility) bakıp tabloyu yaptığım ve yeniden oluşturduğum "IGNORECASE = TRUE" ifadesini ekliyor. Bununla birlikte, bunlar alıntılandıkları ve büyük/küçük harfe duyarlı kaldıkları için hala oluşturulmuşlardır. 1.4.191'i kullanma. –