Liquibase VARCHAR2长度在字符中

时间:2014-12-05 13:36:10

标签: database oracle rdbms database-migration liquibase

我想用chars中定义的大小独立定义一个VARCHAR2列数据库。我需要至少支持Oracle和PostgreSQL。我使用UTF8编码,所以我没有机会使用字节定义。

我需要在Oracle中使用VARCHAR2(255 CHAR)定义,但CHAR修饰符在其他dbms(如PG)下无效。在不向脚本添加CHAR修饰符的情况下,生成的Oracle定义使用字节作为长度:VARCHAR2(255)。

什么是正确的定义?

2 个答案:

答案 0 :(得分:7)

在liquibase中没有一种内置方式可以将数据类型定义为" varchar 255,char type"并在oracle上的postgresql和VARCHAR2(255 CHAR)上输出VARCHAR(255)。

Liquibase被设计为可扩展的(liquibase.org/extensions),你应该能够覆盖字符串" VARCHAR(255)"在changelog中转换为特定于数据库的类型,但它需要一些java编码。

或者,changelog参数允许您根据数据库动态地将CHAR添加到定义中。如果您将<property name="varcharUnit" value="CHAR" dbms="oracle"/>添加到更改日志的顶部,那么您可以在更改日志文件中的任何位置使用type="VARCHAR(255 ${varcharUnit})",它将评估为&#34; VARCHAR(255 CHAR)&#34;在oracle和VARCHAR(255)的其他地方。它更冗长,你需要记住总是添加变量与扩展方法相比,但它更直接。

答案 1 :(得分:1)

归功于内森的灵感;我只是增加了一些清晰度。

<property name="char" value="CHAR" dbms="oracle"/>
<property name="char" value=""/>
<changeSet … >
    <createTable tableName="User">
        <column
            name="guid"
            type="VARCHAR(32)"
        />
        <column
            name="name"
            type="VARCHAR(50 ${char})"
        />
        ⋮