带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接

Posted

技术标签:

【中文标题】带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接【英文标题】:JDBC URL with ignorecase is not working for H2 database connection 【发布时间】:2021-03-30 13:19:55 【问题描述】:

我试图在 SQL 模式下使用 h2 数据库。我能够创建一个模式,全部大写,并在其下创建一些表。但是,除非我匹配所有大写的模式名称,否则我在休眠状态下运行的应用程序似乎无法正常工作。我认为可以在 JDBC 连接字符串中使用 IGNROECASE=TRUE 配置 h2。我错过了什么吗?

【问题讨论】:

这是一种类型吗?应该是 IGNORECASE=TRUE 这会有所帮助吗:github.com/dineshbhagat/spring-boot-web-jpa/blob/… 【参考方案1】:

IGNORECASE 设置与数据库对象的名称无关,它以奇怪的方式将CHARACTER VARYING 列的排序规则更改为不区分大小写。

在 H2 和许多其他 DBMS 中具有默认设置的未加引号的标识符会按照 SQL 标准的要求转换为大写。

如果您使用 mysql 或 PostgreSQL 兼容模式,通常需要指定 DATABASE_TO_LOWER=TRUE,因为这些 DBMS 会将不带引号的标识符转换为小写。您可以在此处找到有关这些兼容模式的更多详细信息: https://h2database.com/html/features.html#compatibility

在某些情况下,您可能还需要CASE_INSENSITIVE_IDENTIFIERS=TRUE

这两个设置自 H2 1.4.198 起可用。在旧版本中,您可以改用DATABASE_TO_UPPER=FALSE;但不要在较新的版本中使用此设置。

【讨论】:

我的 URL 已经具有这些属性。我正在使用 1.4.200。它是否正确? jdbc:h2:file:../../../test-classes/test4;MODE=MSSQLServer;database_to_upper=false;IGNORECASE=true;AUTO_SERVER=TRUE; 您需要删除 DATBASE_TO_UPPER 设置及其值。 我更改为以下但仍然出现异常 jdbc:h2:file:$project.build.directory/test-classes/test4;MODE=MSSQLServer;IGNORECASE=true;AUTO_SERVER=TRUE org .h2.jdbc.JdbcSQLSyntaxErrorException:找不到架构“my_schema”; 如果您确定此架构存在,但名称中的字符大小写不同,您可以添加CASE_INSENSITIVE_IDENTIFIERS=TRUE 设置。但这意味着您的应用程序中存在一些问题。 删除了 DATABASE_TO_UPPER 并添加了 CASE_INSENSITIVE_IDENTIFIERS=TRUE 解决了这个问题。谢谢大家。

以上是关于带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

Spring 安全忽略 url 不适用于我们的安全忽略方法 [重复]

C++:url 阅读器功能不适用于带有 \ 符号的 URL 链接。请帮助我

H2 jdbc 异常 - 具有奇数个字符的十六进制字符串

IgnoreCase Finder 不适用于 Spring Data Rest 和 Neo4J

带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数

具有多结果子查询的查询不适用于 jdbc