首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liquibase VARCHAR2长度(字符)

Liquibase VARCHAR2长度(字符)
EN

Stack Overflow用户
提问于 2014-12-05 21:36:10
回答 2查看 9.4K关注 0票数 5

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

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

正确的定义是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-06 00:37:50

没有一种内置的方法可以将数据类型定义为“varchar255,char type”,并让它在postgresql上输出VARCHAR(255),在oracle上输出VARCHAR2(255 CHAR)。

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

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

票数 11
EN

Stack Overflow用户

发布于 2017-03-16 03:17:48

这要归功于Nathan的灵感,我只是想补充一些清晰的东西。

代码语言:javascript
复制
<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})"
        />
        ⋮
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27317116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档