Mysql兼容的内存数据库中的查询错误(h2)

Posted

技术标签:

【中文标题】Mysql兼容的内存数据库中的查询错误(h2)【英文标题】:Query error in Mysql compatible in-memory database (h2) 【发布时间】:2019-08-09 17:26:33 【问题描述】:

我试图在我的 Spring Boot 应用程序上执行一些集成测试。发现内存数据库符合我们的需求。决定使用 h2 数据库。目前我们正在使用 mysql 5.5 版本。我从 mysql 转储了 create query。示例查询:-

CREATE TABLE `TEST` (
  `id` varchar(20) NOT NULL,
  `test` enum('','of') NOT NULL,
   PRIMARY KEY (`id`)
);

我在 pom.xml 中使用以下依赖项:-

<dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.199</version>
        <scope>test</scope>
</dependency>

如果我在 h2 上执行此查询,则会出现以下错误:-

Empty enums are not allowed; SQL statement:

我在 mysql 模式下使用 h2,连接方式为:-

jdbc:h2:file:~/test;MODE=MYSQL

有什么我可以做的吗?如果我的数据源是 mysql ,是否还有其他与 mysql 兼容的内存数据库。我听说过 mariaDB4j:mariaDB4j 。

【问题讨论】:

【参考方案1】:

这可能是一个错误,针对空值的规则似乎破坏了连接字符串中请求的 mysql 兼容模式。当然,对于 H2 原生模式,它是有意义的,但这不是这里的用例。

【讨论】:

【参考方案2】:

错误很明显,不能在枚举列中使用空值。用一个值来表示空虚,而不是

[...]
`test` enum('','of') NOT NULL,
[...]

使用

[...]
`test` enum('--','of') NOT NULL,
[...]

[...]
`test` enum(' ','of') NOT NULL,
[...]

【讨论】:

此查询在 mysql 5.5 版本中有效,但在 h2 数据库中无效。内存数据库中是否有其他与 mysql 5.5 兼容的数据库? @yathatha我不知道。

以上是关于Mysql兼容的内存数据库中的查询错误(h2)的主要内容,如果未能解决你的问题,请参考以下文章

播放框架2:内存数据库中的h2 mysql兼容模式:转义字符

H2 在 MySQL 模式下,内存 DB 对 ORDER BY 的处理方式不同

H2 和 Oracle 兼容性问题

如何在内存数据库中使用 H2 测试 EntityManager 查询

Hibernate 不在内存数据库中使用 H2 创建表

用于与 postgresql 在内存中兼容 h2 的 Spring Boot 属性