URL-адрес JDBC с ignorecase не работает для подключения к базе данных H2

#java #hibernate #h2

#java #спящий режим #h2

Вопрос:

Я пытался использовать базу данных h2 в режиме SQL. Я смог создать схему со всеми прописными буквами и создать под ней несколько таблиц. Однако мое приложение, работающее в режиме гибернации, похоже, не работает, если я не совпадаю с именем схемы во всех прописных буквах. Я думал, что h2 можно настроить, используя IGNROECASE=TRUE в строке подключения JDBC. Я что-то упустил?

Комментарии:

1. Это что, прообраз? Должно быть IGNORECASE=TRUE

2. поможет ли это: github.com/dineshbhagat/spring-boot-web-jpa/blob /…

Ответ №1:

IGNORECASE настройка не связана с именами объектов базы данных, она странным образом изменяет сопоставление CHARACTER VARYING столбцов без учета регистра.

Идентификаторы без кавычек в H2 с настройками по умолчанию и во многих других СУБД преобразуются в верхний регистр, как того требует стандарт SQL.

Если вы используете режимы совместимости с MySQL или PostgreSQL, вам обычно необходимо указать DATABASE_TO_LOWER=TRUE , потому что эти СУБД вместо этого преобразуют идентификаторы без кавычек в нижний регистр. Вы можете найти более подробную информацию об этих режимах совместимости там: https://h2database.com/html/features.html#compatibility

В некоторых случаях вам также может понадобиться CASE_INSENSITIVE_IDENTIFIERS=TRUE .

Оба эти параметра доступны с версии H2 1.4.198. В более старых версиях вы можете использовать DATABASE_TO_UPPER=FALSE вместо этого; но не используйте этот параметр в более новых версиях.

Комментарии:

1. Мой URL-адрес уже обладает этими свойствами. Я использую 1.4.200. Это правильно? jdbc:h2:file:../../../test-classes/test4;MODE=MSSQLServer;database_to_upper=false;IGNORECASE=true;AUTO_SERVER=TRUE;

2. Вам необходимо удалить DATBASE_TO_UPPER параметр с его значением.

3. Я изменился на следующее, но все еще получаю исключение jdbc:h2:file:${project.build.directory}/test-classes/test4;MODE=MSSQLServer;IGNORECASE=true;AUTO_SERVER= TRUE org.h2.jdbc.JdbcSQLSyntaxErrorException: схема «my_schema» не найдена;

4. Если вы уверены, что эта схема существует, но с другим регистром символов в ее имени, вы можете добавить CASE_INSENSITIVE_IDENTIFIERS=TRUE настройку. Но это означает некоторую проблему в вашем приложении.

5. Удаленный DATABASE_TO_UPPER и добавленный CASE_INSENSITIVE_IDENTIFIERS =TRUE решили проблему. Спасибо всем.