液碱VARCHAR2长度(以字符为单位)



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

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

正确的定义是什么?

liquibase 中没有内置的方法将数据类型定义为"varchar 255,char 类型",并让它在 postgresql 上输出 VARCHAR(255),在 oracle 上输出 VARCHAR2(255 CHAR)。

Liquibase 被设计为可扩展 (liquibase.org/extensions),您应该能够覆盖如何将更改日志中的字符串"VARCHAR(255)"转换为特定于数据库的类型,但它需要一些 Java 编码。

或者,更改日志参数将允许您根据数据库动态地将 CHAR 添加到定义中。如果你把<property name="varcharUnit" value="CHAR" dbms="oracle"/>添加到你的更新日志的顶部,那么你的变更日志文件中的任何位置都可以使用type="VARCHAR(255 ${varcharUnit})",它会在oracle上计算为"VARCHAR(255 CHAR)",在其他任何地方的VARCHAR(255)上计算。它更详细,与扩展方法相比,您需要记住始终添加变量,但它更直接。

感谢内森的灵感;我只是添加一些清晰度。

<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})"
        />
        ⋮

相关内容

  • 没有找到相关文章

最新更新