如何使用 hsqldb 和 SET DATABASE SQL REGULAR NAMES

Posted

技术标签:

【中文标题】如何使用 hsqldb 和 SET DATABASE SQL REGULAR NAMES【英文标题】:how to use hsqldb and SET DATABASE SQL REGULAR NAMES 【发布时间】:2019-10-13 22:49:13 【问题描述】:

我通常需要使用内存中的数据库来模拟生产数据库。生产是 mysql 并且我正在尝试使用 hsqldb 来模拟它,使用 Spring Boot 来处理替换。所有这些都很好,包括找到我的 flyway 脚本并运行它们。我遇到的问题是在 flyway 脚本的运行期间出现的。过去有人决定将其中一个 mysql 表称为“_show”,而 mysql 似乎对此很满意。 Hsqldb 不高兴。我发现了一些声称可以解决这个问题的设置的引用,但它们似乎没有任何区别。这是我的脚本的样子:

SET DATABASE SQL NAMES FALSE
SET DATABASE SQL REGULAR NAMES FALSE

CREATE TABLE _show (
  id bigint(20) NOT NULL,
...

有了这个,我得到:

org.hsqldb.HsqlException: unexpected token: _SHOW

flyway 尝试执行脚本时。我尝试在表名周围加上双引号,但这次出现了关于左括号的不同错误,我尝试使用反斜杠来引用下划线。没运气。我想我一定是在以某种方式滥用 SET DATABASE... 标志,但我找不到任何使用它们的示例,只有文档表明我这样做是正确的。

我正在使用 org.hsqldb:hsqldb:2.5.0

感谢您的帮助

【问题讨论】:

你试过了吗**CREATE TABLE "_SHOW" ** @nbk 是的,没有帮助。 【参考方案1】:

SET 语句在 2.5.0 版本中运行良好,并允许创建 _SHOW 表。 BIGINT(20) 声明不兼容,对于 HSQLDB 应该是 BIGINT。

您可以使用 HSQLDB 数据库管理器并手动执行 SQL,一次一个语句,在 mem: 数据库中查看导致问题的原因。如果你报告的语句是分块执行的,那么在 CREATE 编译之前 SET 命令不会生效。

【讨论】:

你说得对,它真的在抱怨 bigint(20) 而不是 _show。 顺便说一句,为了与 mysql 的一般兼容性,包括 BIGINT(20),请使用“SET DATABASE SQL SYNTAX MYS TRUE” 这很有用

以上是关于如何使用 hsqldb 和 SET DATABASE SQL REGULAR NAMES的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB prepareStatement("SET SCHEMA ?") 错误

如何在当前使用 HSQLDB 的 Spring 和 Hibernate 后台使用 MySQL

如何将 HSQLDB 与 Ruby on Rails 一起使用。

如何通过 HSQLDB 和 MySQL 之间的差异来处理 union/order?

如何使用 Hibernate 加载 HSQLDB 脚本

如何使用 HSQLDB API 的 org.hsqldb.jdbc.JDBCConnection 类