2012-05-28 19 views
17

H2 parece marcar la diferencia entre el nombre con comillas y el nombre sin comillas. ¿Hay alguna manera de hacer que los trate de la misma manera?Hacer que H2 trate el nombre entrecomillado y el nombre sin comillas como el mismo

He aquí las pruebas que he hecho:

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

Estas son las preguntas:

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 

¿Qué puedo hacer para que esas consultas trabajan con H2?

+0

Lea el estándar SQL y aprenda a utilizar MAYÚSCULAS, según corresponda, creo. El efecto de las comillas es evitar el mapeo predeterminado de mayúscula a minúscula. – bmargulies

+0

@bmargulies ¿'MAYÚSCULA' incluso funciona con H2? No puedo encontrarlo en la documentación SQL de H2. – Drahakar

+0

No como una función, solo deletérelos. "PRUEBA" es lo que coincide con la prueba simple. – bmargulies

Respuesta

29

Quotes names in H2 are case sensitive, según lo requiera la especificación SQL. Eso significa que esto va a funcionar:

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

pero esto no será:

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

Unquotes names are not case sensitive in H2. Normalmente se convierten a mayúsculas (como en Oracle y otras bases de datos). Eso significa que las declaraciones

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

son los mismos que

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

En ese H2 se comporta de la misma manera que Oracle. Esto es un poco diferente sobre cómo otras bases de datos como MySQL y PostgreSQL tratan con los nombres de los identificadores. H2 tiene una función de compatibilidad: si agrega ;DATABASE_TO_UPPER=FALSE a la URL de la base de datos, los identificadores de las comillas no se convierten a mayúsculas, lo que significa que también distinguen entre mayúsculas y minúsculas. Pero debe agregar esto al crear la base de datos, y cada vez que la use (si agrega la configuración para las bases de datos existentes, los identificadores de los objetos existentes ya están convertidos a mayúsculas).

Por cierto, esto no tiene nada que ver con el function UPPER, que es para datos. Su pregunta es sobre identificadores, no datos.

+0

Gracias por su ayuda, M. Mueller. – Drahakar

+0

¿Hay alguna manera de decirle a h2 que las tablas creadas con nombres entre comillas no sean sensibles a mayúsculas y minúsculas? es decir, si 'create table' test "' permitirá 'seleccionar * de prueba' para que funcione? –

+0

Al mirar [la sección de compatibilidad] (http://www.h2database.com/html/features.html?highlight=IGNORECASE&search=ignorecase#compatibility) se describe la adición de '; IGNORECASE = TRUE' que he hecho y recreado tablas, sin embargo, se siguen creando a medida que se citan y siguen siendo sensibles a mayúsculas y minúsculas. Usando 1.4.191. –

Cuestiones relacionadas