Подтвердить что ты не робот

Сделать H2 цитируемым именем и некотируемым именем как одно и то же

H2, кажется, имеет значение между именем с цитатой и именем без цитаты. Есть ли способ заставить их относиться к ним одинаково?

Здесь тесты, которые я сделал:

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

Вот запросы:

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

Что я могу сделать, чтобы эти запросы работали с H2?

4b9b3361

Ответ 1

Имена котировок в Н2 чувствительны к регистру, как того требует спецификация SQL. Это означает, что это будет работать:

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

но это не будет:

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

Имена недочетов не чувствительны к регистру в H2. Обычно они преобразуются в верхний регистр (как в Oracle и других базах данных). Это означает, что утверждения

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

совпадают с

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

В том, что H2 ведет себя так же, как Oracle. Это немного отличается от того, как другие базы данных, такие как MySQL и PostgreSQL, имеют дело с именами идентификаторов. H2 имеет функцию совместимости: если вы добавляете ;DATABASE_TO_UPPER=FALSE к URL-адресу базы данных, идентификаторы незаметки не преобразуются в верхний регистр, это означает, что они чувствительны к регистру также. Но вам нужно добавить это при создании базы данных, и каждый раз, когда вы ее используете (если вы добавите параметр для существующих баз данных, идентификаторы существующих объектов уже конвертированы в верхний регистр).

Кстати, это не имеет ничего общего с функцией