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

当迁移到SpringBoot 1.3时,Liquibase在MySQL中为BINARY(16)生成类型LONGBLOB

周瀚
2023-03-14

当我将Springboot web应用程序从1.2.6版移动到1.3.1版时,发生了非常意外的事情。

我正在使用 Liquibase 3.4.2 来初始化我的数据库,在 XML 更改日志中声明为“BINARY(16)”的字段在数据库中创建为“LONGBLOB”(MySQL)。

字段声明如下例所示:

 <createTable tableName="administrativeunit">
            <column name="id" type="BINARY(16)">
                <constraints nullable="false"/>
            </column>

我正在使用MySQL和HSQLDB(应用程序支持这两个DB),并且它发生在它们两个中。

奇怪的是,如果我把它移回Spring-boot 1.2.6,这些字段会像预期的那样被声明(BINARY(16))。

有人有任何关于如何覆盖这个功能或使其工作的提示吗?

更新:这似乎是Springboot指出的liquibase版本中的问题。在我的pom.xmlliquibase被声明为:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

因此,当我升级到SpringBoot1.3.1时,它自动加载了Liquibase 3.4.2,这存在上述问题。因此,我通过指定版本强制pom.xml使用以前的版本,如下所示:

    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.3.5</version>
    </dependency>

我认为这是一种变通方法。可能它是Liquibase中的一个bug,但springboot团队可以将liquibase lib引用到工作版本,而不是3.4.2。

共有1个答案

巫朝明
2023-03-14

感谢Stephane Nicoll的评论,这是3.4.2版本中的bug:

http://liquibase.jira.com/browse/CORE-2531

所以,如果你在SpringBoot的1.3.x版本中遇到这个bug,强制你的应用程序使用Liquibase以前的版本。在我的例子中,它适用于版本3.3.5,只需在pom.xml中添加以下更改:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>3.3.5</version>
</dependency>
 类似资料:
  • 我正在编写一个带有Spring boot的RESTfull API,使用Maven Liquibase来管理数据库的MySQL8迁移。 我已经在网上搜索了(1,2,3),但Liquibase在迁移中仍然生成“tinyblob”类型,而不是“point”或“geometry”。令人惊讶的是,当我编辑迁移文件(即changeSet并使用“point”)时,仍然在数据库上创建列。 我有一个典型的JPA实

  • 我以前见过类似的话题,但没有解决方案。 完整的堆栈跟踪是这样的... 严重的7/27/16下午6:14:liquiBase:CVC-complex-type.2.3:元素“create table”不能有字符[子],因为该类型的内容类型是只包含元素的。LiquiBase.exception.ChangeLogParseException:解析MSSQL-ConfluenceTest-ChangeL

  • 问题内容: 我们的Oracle数据库遇到了严重的性能问题,我们想尝试将其迁移到基于MySQL的数据库(直接使用MySQL,或者最好是Infobright)。 问题是,在我们实际上不知道新数据库的所有功能是否符合我们的需求之前,我们需要让旧系统和新系统至少重叠数周(如果不是几个月)。 因此,这是我们的情况: Oracle数据库由多个表组成,每百万行。白天,实际上有成千上万的语句,我们无法停止迁移。

  • 改变变量的类型。 操作步骤: 菜单栏: Refactor --> Type Migration 快捷键 Mac: fn+ Shift + Command + F6

  • 迁移是一种结构化与有组织的方式来更改数据库的方便方法。你可以手动编辑 SQL 的片段,然后告知其他开发人员他们需要运行这些片段。你还得保持追踪他们的变化,追踪那些下次部署时那些需要运行但是会与生产设备冲突的变化。 数据库表的 迁移 追踪那些已经运行的迁移信息,你需要做的就是更新你的应用文件并执行 $this->migrate->current() 来计算出哪个迁移信息是需要被运行的。迁移信息的当前

  • 迁移是一种非常方便的途径来组织和管理你的数据库变更,当你编写了一小段 SQL 对数据库做了修改之后,你就需要告诉其他的开发者他们也需要运行这段 SQL , 而且当你将应用程序部署到生产环境时,你还需要记得对数据库已经做了哪些修改, 需要执行哪些 SQL 。 在 CodeIgniter 中,migration 表记录了当前已经执行了哪些迁移,所以 你需要做的就是,修改你的应用程序文件然后调用 $th

  • 在docker容器中部署应用程序时,我无法使用Spring Boot实现liquibase迁移。我有一个胖罐子,它是在docker图像创建时提取的。 我有一个单独的模块,保存迁移文件。我能装上主机。xml: 然后它继续并加载其余的资源。问题在于然后从加载的资源中提取仍然正常的实际路径: 但是接下来做一些路径操作,结果是: 这反过来又不是有效的类路径: 我需要(类路径)或以能够读取文件。但它总是以上

  • 我部署Laravel准骨项目到Microsoft Azure,但每当我试图执行我得到的错误: [2015-06-13 14:34:05]生产。错误:异常'Symfony\Component\Debug\Exc0019\FatalErrorExc0019',消息'Class"未找到'在D:\home\site\供应商\laravel\框架\src\Illumate\数据库\Migrations\Mi