我想用chars中定义的大小独立定义一个VARCHAR2列数据库。我需要至少支持Oracle和PostgreSQL。我使用UTF8编码,所以我没有机会使用字节定义。
我需要在Oracle中使用VARCHAR2(255 CHAR)定义,但CHAR修饰符在其他dbms(如PG)下无效。在不向脚本添加CHAR修饰符的情况下,生成的Oracle定义使用字节作为长度:VARCHAR2(255)。
什么是正确的定义?
答案 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})"
/>
⋮