错误“未找到架构“information_schema”;”在 H2 数据库上运行“迁移”

问题描述

我正在 ColdBox 应用程序中测试 h2 数据库(在 lucee 上)... 我可以使用 Quick 连接到数据库,但无法运行迁移...

这是migration init和migration up后CommandBox显示错误

ERROR (5.2.1+00295)
Schema "information_schema" not found; sql statement:SELECT 1 FROM "information_schema"."tables" WHERE "table_name" = ? AND "table_schema" = ? [90079-172]   
MigrationService.cfc
SELECT 1 FROM "information_schema"."tables" WHERE "table_name" = 'cfmigrations' AND "table_schema" = 'testAppDB'

application.cfcBox.json 都使用 ENVIRONMENT 设置:

# ColdBox Name and Environment
APPNAME=tastApp
ENVIRONMENT=development

DB_BUNDLeverSION=1.3.172
DB_PORT=
DB_USER=sa
DB_BUNDLENAME=org.h2
DB_CLASS=org.h2.Driver
DB_HOST=127.0.0.1
DB_DRIVER=org.h2.Driver
DB_SCHEMA=appDB
DB_DATABASE=appDB
DB_CONNECTIONSTRING=jdbc:h2:/Users/elena/coldBox-examples/testApp/database/appDB;MODE=MysqL;
DB_PASSWORD=

h2 是从 lucee 下载页面下载并保存在 /lib 文件夹中(我在 Box.json 中添加了依赖项)

这是语法设置:

"defaultGrammar":"Autodiscover@qb"

我错过了什么?

提前致谢

埃琳娜


更新 - 5 月 18 日

感谢 Evgenij,

现在我可以查询最新版本的 h2,1.4.200,它接受设置 (CASE_INSENSITIVE_IDENTIFIERS = TRUE),该设置使所有标识符名称(表名称、列名称)不区分大小写。

不幸的是,使用 commandBox-migrations 迁移仍然给我错误

这些是我当前使用的配置:

"cfmigrations":{
    "migrationsDirectory":"resources/database/migrations","schema":"informatION_SCHEMA","connectionInfo":{
        "bundleName":"com.h2database","bundLeversion":"1.4.200","password":"","connectionString":"jdbc:h2:/Users/elena/coldBox-examples/testApp/database/appDB;MODE=MysqL;DATABASE_TO_LOWER=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE;","class":"org.h2.Driver","username":""
    },"defaultGrammar":"Autodiscover@qb"
}

这是最后一个错误

> * > CLI v5.2.1 > 10:59 AM > ~/coldBox-examples/testApp/ > testApp (1.0.0) >
 lucee 5.3.7 (running) >
> migrate up
ERROR (5.2.1+00295)                                                                                                                                             Unable to resolve com.h2database [108](R 108.0): missing requirement [com.h2database [108](R 108.0)] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.5.0)) 
Unresolved requirements: [[com.h2database [108](R 108.0)] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.5.0))]
  caused by: org.osgi.framework.BundleException
Unable to resolve com.h2database [108](R 108.0): missing requirement [com.h2database [108](R 108.0)] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.5.0)) Unresolved requirements: [[com.h2database [108](R 108.0)] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.5.0))]

解决方法

H2 1.3.172 非常旧,它无法正确模拟 MySQL 中的非标准小写 INFORMATION_SCHEMA

您需要使用最新版本的 H2(例如 1.4.200)并将 ;MODE=MySQL;DATABASE_TO_LOWER=TRUE 附加到 JDBC URL,仅 ;MODE=MySQL 是不够的。