【发布时间】:2016-12-03 14:43:15
【问题描述】:
我目前使用 mysql 作为我的数据库,并使用 flyway 来管理数据库模式。我所有的单元测试都是针对 mysql 运行的,并且随着添加更多单元测试,它们的运行速度非常慢。现在我想在单元测试中将数据库从 mysql 更改为 h2 内存数据库。以下是我对 h2 db 连接的设置:
#Datasource
spring.datasource.url=jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE;DATABASE_TO_UPPER=true
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.default-transaction-isolation-level=1
当我运行 flywayMigrate 时,我得到了一些 sql 错误。下面是一个例子,这个 sql 用于在 mysql 上创建一个表,但在 h2 上运行失败。
CREATE TABLE `file_storage` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`file_name` VARCHAR(45) NULL,
PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8;
下面是我从 h2 得到的错误。我不知道我的sql有什么问题。有没有办法让 h2 接受 mysql 数据库架构?
Execution failed for task ':dbschema:flywayMigrate'.
> Error occurred while executing flywayMigrate
Migration V2016_02_26_12_59__create_file_storage.sql failed
-----------------------------------------------------------
SQL State : 42000
Error Code : 42000
Message : Syntax error in SQL statement "CREATE TABLE ""FILE_STORAGE"" (
""ID"" BIGINT(64) NOT NULL AUTO_INCREMENT,
""FILE_NAME"" VARCHAR(45) NULL,
PRIMARY KEY (""ID""))
DEFAULT CHARACTER[*] SET = UTF8 "; SQL statement:
CREATE TABLE `file_storage` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`file_name` VARCHAR(45) NULL,
PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8 [42000-190]
Location : db/migration/V2016_02_26_12_59__create_file_storage.sql (/Users/yzzhao/dev/cooltoo/cooltoo_backend/dbschema/build/resources/main/db/migration/V2016_02_26_12_59__create_file_storage.sql)
Line : 1
Statement : CREATE TABLE `file_storage` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`file_name` VARCHAR(45) NULL,
PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8
Syntax error in SQL statement "CREATE TABLE ""FILE_STORAGE"" (
""ID"" BIGINT(64) NOT NULL AUTO_INCREMENT,
""FILE_NAME"" VARCHAR(45) NULL,
PRIMARY KEY (""ID""))
DEFAULT CHARACTER[*] SET = UTF8 "; SQL statement:
CREATE TABLE `file_storage` (
`id` BIGINT(64) NOT NULL AUTO_INCREMENT,
`file_name` VARCHAR(45) NULL,
PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8 [42000-190]
编辑
我有数百个在 mysql 中运行良好的 sql 脚本。所以我不想更改这些脚本中的任何内容。有没有办法让h2接受mysql脚本?
【问题讨论】:
-
替换或删除 ` ;或者试试topnew.net/sidu点击表desc,然后复制过去create table SQL,不需要的时候不要```
-
我已尝试删除所有 ` 但出现“SQL 中的语法错误”错误。我有一百多个sql脚本,我真的不想一一更改。所有这些 sql 在 mysql 中运行良好。所以我徘徊是否有办法配置 h2 db 来接受这些语法。