Jooq Schema 区分大小写

Jooq Schema Case Sensitivity

我有一个案例,我使用相同的模式名称在 Oracle 和 MySql 之间切换。我想使用任一数据库类型生成 类 并在另一个数据库类型上执行操作。由于区分大小写的问题,我发现同时包含两者的方法是包含小写的模式名称(因为 Oracle 和 MySql 都支持)和大写的 table 名称和列名称(相同原因)。

但是,当将outputShema声明为小写时,Jooq会明确检查数据库类型,如果是Oracle,则设置为大写。有什么解决方法吗?

您 运行 遇到了一系列不幸的警告,这些警告将很快得到解决。现在的解决方法是在两个数据库中使用 UPPER_CASE 模式名称,并将代码生成器配置为至少包含两个输入模式。我来解释一下:

Oracle 和 lower_case 模式名称

不幸的是,由于历史原因,jOOQ 目前在 Oracle 中使用不区分大小写的模式名称搜索。这会导致性能问题: https://github.com/jOOQ/jOOQ/issues/5989

而且也不正确。这就是为什么 jOOQ 3.10 会解决这个问题: https://github.com/jOOQ/jOOQ/issues/5990

MySQL 和 UPPER_CASE 架构名称

根据您的 OS(例如 Windows 和 MacOS)和 MySQL 中的区分大小写设置,[=11= 存在一些问题] 架构名称。这可能会导致 jOOQ 的代码生成器出现问题: https://github.com/jOOQ/jOOQ/issues/5213

该问题已在 jOOQ 3.10 中修复,并将集成到 3.9.3 中。此问题的解决方法是在 jOOQ 代码生成器中使用多个输入模式,这将解决这个奇怪的 MySQL 错误: https://bugs.mysql.com/bug.php?id=86022

总结

一个不错的选择是在所有地方使用 UPPER_CASE,包括您的 DDL 语句:

CREATE TABLE "ORACLE_SCHEMA"."ORACLE_TABLE" AS (
  "ORACLE_COLUMN" VARCHAR2(50)
);

CREATE TABLE `MYSQL_SCHEMA`.`MYSQL_TABLE` AS (
  `MYSQL_COLUMN` VARCHAR(50)
);