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 的处理方式不同