带有忽略大小写的 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 链接。请帮助我
IgnoreCase Finder 不适用于 Spring Data Rest 和 Neo4J