mysql到h2 ddl的问题

m2xkgtsf  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(564)

我有一个在mysql中创建的表,它已经启动,并且运行良好。但是我已经用h2定义了一个内存中的数据库用于测试,它使用相同的ddl来克隆表,我可以用它来测试我的应用程序。

CREATE TABLE `foo` (
    `fieldA`   BIGINT(20)    NOT NULL AUTO_INCREMENT,
    `fieldB`   BIGINT(20)    NOT NULL,
    `fieldC`   TIMESTAMP     NOT NULL,
    `fieldD`   TIMESTAMP     NOT NULL,
    `fieldE`   VARCHAR(40)   NOT NULL,
    `fieldF`   VARCHAR(40)   NOT NULL,
    `fieldG`   CHAR(3)       NOT NULL,
    PRIMARY KEY (`id`),
    KEY `fieldF` (`fieldF`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

但当我尝试为测试初始化表时,它会返回以下错误:
原因:org.h2.jdbc.jdbcsqlexception:未知数据类型:“fieldf”;
这和错误得到的帮助差不多。我已经显式地将字段f设置为varchar(40),那么我还需要做什么呢?
如果有帮助,我将在spring boot配置中创建以下表:

@Configuration
@EnableAutoConfiguration
@Import(ImportDataJobConfig.class)
public class TestJobConfiguration {

    @Bean
    public DataSource tlDataSource() {
        return new EmbeddedDatabaseBuilder()
                .generateUniqueName(true)
                .setType(H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .addScript("sql/ve/init.sql")
                .build();
    }
}

谢谢!

hgqdbh6s

hgqdbh6s1#

使用h2-1.4.196 mysql模式,您的代码段会出现以下错误:
找不到列“id”(…)
你的ddl搞错了 id 需要修复。
为了纠正您面临的错误,我建议:
在jdbc url中使用mysql模式,比如 jdbc:h2:mem:;mode=mysql 看来你真正的主键是 fieldA ,不是 id . 请相应地更改sql ddl:

CREATE TABLE `foo` (
`fieldA`   BIGINT(20)    NOT NULL AUTO_INCREMENT,
`fieldB`   BIGINT(20)    NOT NULL,
`fieldC`   TIMESTAMP     NOT NULL,
`fieldD`   TIMESTAMP     NOT NULL,
`fieldE`   VARCHAR(40)   NOT NULL,
`fieldF`   VARCHAR(40)   NOT NULL,
`fieldG`   CHAR(3)       NOT NULL,
PRIMARY KEY (`fieldA`),
KEY `fieldF` (`fieldF`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

相关问题