私は現在データベースとしてmysqlを使用しており、データベーススキーマを管理するためにflywayを使用しています。私のすべてのユニットテストはmysqlに対して実行されており、単体テストを追加すると実際には遅いです。今私はユニットテストでデータベースをmysqlからh2メモリデータベースに変更したいと思います。以下は、H2データベースの接続のための私の設定です:mysqlデータベーススキーマをh2データベースと互換性を持たせる方法
#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エラーを得ました。以下は1つの例ですが、この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]
EDIT
私はMySQLで罰金を実行しているSQLスクリプトの数百を持っています。だから私はこれらのスクリプトで何かを変更したくない。 h2がmysqlスクリプトを受け入れる方法はありますか?
';を置換または削除します。または、http://topnew.net/siduテーブルのdescをクリックして、テーブル作成前のSQLをコピーしてください。不要な場合はなし – SIDU
すべてを削除しようとしましたが、 'SQLで構文エラーが発生しました'というエラーが発生しました。私は何百ものSQLスクリプトを持っています。私は本当にそれらを1つずつ変更したくありません。これらのSQLはすべてmysqlでうまく動作します。ですから、これらの構文を受け入れるようにh2 dbを設定する方法があるかどうかはわかりません。 –