当前位置: 首页 > 知识库问答 >
问题:

MySQL到H2 DDL的问题

计胤
2023-03-14

我在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;

但是,当我尝试为测试初始化表时,它会返回以下错误:

原因:组织。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();
    }
}

谢谢

共有1个答案

罗韬
2023-03-14

使用h2-1.4.196 MySQL模式,您的代码片段会出现以下错误:

未找到列“ID”(…)

您的DDL在id周围错误,需要修复。

为了修复您面临的错误,我建议:

>

  • 在JDBC URL中使用MySQL模式,如JDBC:h2:mem:;模式=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;
    

  •  类似资料:
    • 有没有人知道在部署应用程序时会发生什么,为什么同时会有这么多的连接,而我只是在部署一个应用程序,而不是插入数据? 该项目是一个SparingBoot应用程序,所以我默认使用HikariCP作为连接池。我是唯一连接到数据库的用户。 我没有声明某个JPA持久性单元。 下面是上的日志 2021-02-21 14:50:40.153信息4792----[任务-1]com.zaxxer.hikari.hik

    • 问题内容: 我正在将WordPress博客和phpBB论坛迁移到新的托管服务器中。我正在使用phpMyAdmin从先前站点中的数据库导入SQL脚本。 当我用Kate打开.sql脚本时,它说它使用UTF8作为编码。当我在新服务器中导入sql时,可以在phpMyAdmin中选择编码,默认情况下选择utf8。 仍然,当我完成数据库的导入后,我直接在phpMyAdmin中阅读了帖子文本,并看到诸如“é”,

    • 本文向大家介绍mysql 5.7.9 winx64在windows上安装遇到的问题,包括了mysql 5.7.9 winx64在windows上安装遇到的问题的使用技巧和注意事项,需要的朋友参考一下 mysql5.7.9版本以上在windwos上安装时会遇到无法启动但是没有任何报错的问题,那是因为5.7.9以上的版本在MySQL目录下会缺少data目录: Data目录下存储的是一些表文件,用来描述

    • 我试图从Coldfusion 10服务器执行一个MySQL insert语句,这会导致一个Cold Fusion错误。 当从MySQL工作台执行MySQL insert语句时,它可以正常工作。此外,我确认在Coldfusion 10服务器上执行的select语句工作正常。 接下来,我尝试设置变量“binlog format”cfquery本身。 这导致了一个新的CFE。 最后,我尝试在“MySQL

    • 问题内容: 我有一个包含许多用户的表。在该表中,我有一个名为user_id(INT)的列,我想为每个人分别增加。user_id必须从1开始 我准备了一个简单的示例: 以下查询将执行此操作,但是仅在表中已经存在“鲍勃”的情况下才有效… 如果Bob不存在(第一项),则user_id设置为0(零)。这就是问题。我需要user_id从1而不是0开始。 问题答案: 您可以使用如下所示的内容: 但是这样的查询

    • 用于创建表的DB脚本: 创建表(bigint不为NULL,文本,主键())engine=innoDB默认charset=utf8; Rptdesign已附在此处