2013-06-03 20 views
45

Próbuję znaleźć dokumentację dotyczącą obsługiwanych typów, które mogą być używane w plikach dziennika zmian. Ale nie mogę go znaleźć. Czy istnieje dokument, strona lub coś podobnego, gdzie można znaleźć wszystkie problemy specyficzne dla typów. Na przykład typ clob jest obsługiwany w bazach danych o różnych typach. I muszę użyć czegoś takiego:Lista wszystkich typów sqibase sql

<property name="clob.type" value="clob" dbms="oracle,h2,hsqldb"/> 
<property name="clob.type" value="longtext" dbms="mysql"/> 
<column name="clob1" type="${clob.type}"> 
    <constraints nullable="true"/> 
</column> 

Mam nadzieję, że istnieje zasób, w którym opisano wszystkie typy płynów.

Odpowiedz

44

Znalazłem klasę liquibase.database.typeconversion.core.AbstractTypeConverter. Wymienia wszystkie typy, które mogą być wykorzystane:

protected DataType getDataType(String columnTypeString, Boolean autoIncrement, String dataTypeName, String precision, String additionalInformation) { 
    // Translate type to database-specific type, if possible 
    DataType returnTypeName = null; 
    if (dataTypeName.equalsIgnoreCase("BIGINT")) { 
     returnTypeName = getBigIntType(); 
    } else if (dataTypeName.equalsIgnoreCase("NUMBER") || dataTypeName.equalsIgnoreCase("NUMERIC")) { 
     returnTypeName = getNumberType(); 
    } else if (dataTypeName.equalsIgnoreCase("BLOB")) { 
     returnTypeName = getBlobType(); 
    } else if (dataTypeName.equalsIgnoreCase("BOOLEAN")) { 
     returnTypeName = getBooleanType(); 
    } else if (dataTypeName.equalsIgnoreCase("CHAR")) { 
     returnTypeName = getCharType(); 
    } else if (dataTypeName.equalsIgnoreCase("CLOB")) { 
     returnTypeName = getClobType(); 
    } else if (dataTypeName.equalsIgnoreCase("CURRENCY")) { 
     returnTypeName = getCurrencyType(); 
    } else if (dataTypeName.equalsIgnoreCase("DATE") || dataTypeName.equalsIgnoreCase(getDateType().getDataTypeName())) { 
     returnTypeName = getDateType(); 
    } else if (dataTypeName.equalsIgnoreCase("DATETIME") || dataTypeName.equalsIgnoreCase(getDateTimeType().getDataTypeName())) { 
     returnTypeName = getDateTimeType(); 
    } else if (dataTypeName.equalsIgnoreCase("DOUBLE")) { 
     returnTypeName = getDoubleType(); 
    } else if (dataTypeName.equalsIgnoreCase("FLOAT")) { 
     returnTypeName = getFloatType(); 
    } else if (dataTypeName.equalsIgnoreCase("INT")) { 
     returnTypeName = getIntType(); 
    } else if (dataTypeName.equalsIgnoreCase("INTEGER")) { 
     returnTypeName = getIntType(); 
    } else if (dataTypeName.equalsIgnoreCase("LONGBLOB")) { 
     returnTypeName = getLongBlobType(); 
    } else if (dataTypeName.equalsIgnoreCase("LONGVARBINARY")) { 
     returnTypeName = getBlobType(); 
    } else if (dataTypeName.equalsIgnoreCase("LONGVARCHAR")) { 
     returnTypeName = getClobType(); 
    } else if (dataTypeName.equalsIgnoreCase("SMALLINT")) { 
     returnTypeName = getSmallIntType(); 
    } else if (dataTypeName.equalsIgnoreCase("TEXT")) { 
     returnTypeName = getClobType(); 
    } else if (dataTypeName.equalsIgnoreCase("TIME") || dataTypeName.equalsIgnoreCase(getTimeType().getDataTypeName())) { 
     returnTypeName = getTimeType(); 
    } else if (dataTypeName.toUpperCase().contains("TIMESTAMP")) { 
     returnTypeName = getDateTimeType(); 
    } else if (dataTypeName.equalsIgnoreCase("TINYINT")) { 
     returnTypeName = getTinyIntType(); 
    } else if (dataTypeName.equalsIgnoreCase("UUID")) { 
     returnTypeName = getUUIDType(); 
    } else if (dataTypeName.equalsIgnoreCase("VARCHAR")) { 
     returnTypeName = getVarcharType(); 
    } else if (dataTypeName.equalsIgnoreCase("NVARCHAR")) { 
     returnTypeName = getNVarcharType(); 
    } else { 
     return new CustomType(columnTypeString,0,2); 
    } 
+0

rzeczy są teraz trochę bardziej skomplikowane - https://github.com/liquibase/liquibase/blob/master/liquibase-core/src/main/java/liquibase/datatype/core/NumberType.java teraz pokazuje, jak "Numer" jest konwertowany i że @DataTypeInfo (name = "number", aliases = {"numeric", "java.sql.Types.NUMERIC"}, .... ogólnie wszystko jest typowym LiquibaseDataType, z funkcją .toDatabaseDataType() oraz podana lista aliasów –

2

Cóż, skoro liquibase jest open source, zawsze można sprawdzić, czy jest to source code.

Wydaje się, że niektóre klasy typów danych mają metodę toDatabaseDataType(), która powinna dostarczyć informacji o tym, jaki typ działa (jest używany) w określonej bazie danych.

+0

Zobacz powyższy link dla Liquibase 3. * typy - wymienione w katalogu zawierającym nazwy. (Szczególnie DECIMAL jest obecny). – brentiumbrent

102

Jest to wyczerpująca lista wszystkich liquibase typów danych i jak są one konwertowane do różnych baz danych:

boolean 
MySQLDatabase: BIT(1) 
SQLiteDatabase: BOOLEAN 
H2Database: BOOLEAN 
PostgresDatabase: BOOLEAN 
UnsupportedDatabase: BOOLEAN 
DB2Database: SMALLINT 
MSSQLDatabase: [bit] 
OracleDatabase: NUMBER(1) 
HsqlDatabase: BOOLEAN 
FirebirdDatabase: SMALLINT 
DerbyDatabase: SMALLINT 
InformixDatabase: BOOLEAN 
SybaseDatabase: BIT 
SybaseASADatabase: BIT 

tinyint 
MySQLDatabase: TINYINT 
SQLiteDatabase: TINYINT 
H2Database: TINYINT 
PostgresDatabase: SMALLINT 
UnsupportedDatabase: TINYINT 
DB2Database: SMALLINT 
MSSQLDatabase: [tinyint] 
OracleDatabase: NUMBER(3) 
HsqlDatabase: TINYINT 
FirebirdDatabase: SMALLINT 
DerbyDatabase: SMALLINT 
InformixDatabase: TINYINT 
SybaseDatabase: TINYINT 
SybaseASADatabase: TINYINT 

int 
MySQLDatabase: INT 
SQLiteDatabase: INTEGER 
H2Database: INT 
PostgresDatabase: INT 
UnsupportedDatabase: INT 
DB2Database: INTEGER 
MSSQLDatabase: [int] 
OracleDatabase: INTEGER 
HsqlDatabase: INT 
FirebirdDatabase: INT 
DerbyDatabase: INTEGER 
InformixDatabase: INT 
SybaseDatabase: INT 
SybaseASADatabase: INT 

mediumint 
MySQLDatabase: MEDIUMINT 
SQLiteDatabase: MEDIUMINT 
H2Database: MEDIUMINT 
PostgresDatabase: MEDIUMINT 
UnsupportedDatabase: MEDIUMINT 
DB2Database: MEDIUMINT 
MSSQLDatabase: [int] 
OracleDatabase: MEDIUMINT 
HsqlDatabase: MEDIUMINT 
FirebirdDatabase: MEDIUMINT 
DerbyDatabase: MEDIUMINT 
InformixDatabase: MEDIUMINT 
SybaseDatabase: MEDIUMINT 
SybaseASADatabase: MEDIUMINT 

bigint 
MySQLDatabase: BIGINT 
SQLiteDatabase: BIGINT 
H2Database: BIGINT 
PostgresDatabase: BIGINT 
UnsupportedDatabase: BIGINT 
DB2Database: BIGINT 
MSSQLDatabase: [bigint] 
OracleDatabase: NUMBER(38, 0) 
HsqlDatabase: BIGINT 
FirebirdDatabase: BIGINT 
DerbyDatabase: BIGINT 
InformixDatabase: INT8 
SybaseDatabase: BIGINT 
SybaseASADatabase: BIGINT 

float 
MySQLDatabase: FLOAT 
SQLiteDatabase: FLOAT 
H2Database: FLOAT 
PostgresDatabase: FLOAT 
UnsupportedDatabase: FLOAT 
DB2Database: FLOAT 
MSSQLDatabase: [float](53) 
OracleDatabase: FLOAT 
HsqlDatabase: FLOAT 
FirebirdDatabase: FLOAT 
DerbyDatabase: FLOAT 
InformixDatabase: FLOAT 
SybaseDatabase: FLOAT 
SybaseASADatabase: FLOAT 

double 
MySQLDatabase: DOUBLE 
SQLiteDatabase: DOUBLE 
H2Database: DOUBLE 
PostgresDatabase: DOUBLE PRECISION 
UnsupportedDatabase: DOUBLE 
DB2Database: DOUBLE 
MSSQLDatabase: [float](53) 
OracleDatabase: FLOAT(24) 
HsqlDatabase: DOUBLE 
FirebirdDatabase: DOUBLE PRECISION 
DerbyDatabase: DOUBLE 
InformixDatabase: DOUBLE PRECISION 
SybaseDatabase: DOUBLE 
SybaseASADatabase: DOUBLE 

decimal 
MySQLDatabase: DECIMAL 
SQLiteDatabase: DECIMAL 
H2Database: DECIMAL 
PostgresDatabase: DECIMAL 
UnsupportedDatabase: DECIMAL 
DB2Database: DECIMAL 
MSSQLDatabase: [decimal](18, 0) 
OracleDatabase: DECIMAL 
HsqlDatabase: DECIMAL 
FirebirdDatabase: DECIMAL 
DerbyDatabase: DECIMAL 
InformixDatabase: DECIMAL 
SybaseDatabase: DECIMAL 
SybaseASADatabase: DECIMAL 

number 
MySQLDatabase: numeric 
SQLiteDatabase: NUMBER 
H2Database: NUMBER 
PostgresDatabase: numeric 
UnsupportedDatabase: NUMBER 
DB2Database: numeric 
MSSQLDatabase: [numeric](18, 0) 
OracleDatabase: NUMBER 
HsqlDatabase: numeric 
FirebirdDatabase: numeric 
DerbyDatabase: numeric 
InformixDatabase: numeric 
SybaseDatabase: numeric 
SybaseASADatabase: numeric 

blob 
MySQLDatabase: LONGBLOB 
SQLiteDatabase: BLOB 
H2Database: BLOB 
PostgresDatabase: BYTEA 
UnsupportedDatabase: BLOB 
DB2Database: BLOB 
MSSQLDatabase: [varbinary](MAX) 
OracleDatabase: BLOB 
HsqlDatabase: BLOB 
FirebirdDatabase: BLOB 
DerbyDatabase: BLOB 
InformixDatabase: BLOB 
SybaseDatabase: IMAGE 
SybaseASADatabase: LONG BINARY 

function 
MySQLDatabase: FUNCTION 
SQLiteDatabase: FUNCTION 
H2Database: FUNCTION 
PostgresDatabase: FUNCTION 
UnsupportedDatabase: FUNCTION 
DB2Database: FUNCTION 
MSSQLDatabase: [function] 
OracleDatabase: FUNCTION 
HsqlDatabase: FUNCTION 
FirebirdDatabase: FUNCTION 
DerbyDatabase: FUNCTION 
InformixDatabase: FUNCTION 
SybaseDatabase: FUNCTION 
SybaseASADatabase: FUNCTION 

UNKNOWN 
MySQLDatabase: UNKNOWN 
SQLiteDatabase: UNKNOWN 
H2Database: UNKNOWN 
PostgresDatabase: UNKNOWN 
UnsupportedDatabase: UNKNOWN 
DB2Database: UNKNOWN 
MSSQLDatabase: [UNKNOWN] 
OracleDatabase: UNKNOWN 
HsqlDatabase: UNKNOWN 
FirebirdDatabase: UNKNOWN 
DerbyDatabase: UNKNOWN 
InformixDatabase: UNKNOWN 
SybaseDatabase: UNKNOWN 
SybaseASADatabase: UNKNOWN 

datetime 
MySQLDatabase: datetime 
SQLiteDatabase: TEXT 
H2Database: TIMESTAMP 
PostgresDatabase: TIMESTAMP WITHOUT TIME ZONE 
UnsupportedDatabase: datetime 
DB2Database: TIMESTAMP 
MSSQLDatabase: [datetime] 
OracleDatabase: TIMESTAMP 
HsqlDatabase: TIMESTAMP 
FirebirdDatabase: TIMESTAMP 
DerbyDatabase: TIMESTAMP 
InformixDatabase: DATETIME YEAR TO FRACTION(5) 
SybaseDatabase: datetime 
SybaseASADatabase: datetime 

time 
MySQLDatabase: time 
SQLiteDatabase: time 
H2Database: time 
PostgresDatabase: TIME WITHOUT TIME ZONE 
UnsupportedDatabase: time 
DB2Database: time 
MSSQLDatabase: [time](7) 
OracleDatabase: DATE 
HsqlDatabase: time 
FirebirdDatabase: time 
DerbyDatabase: time 
InformixDatabase: INTERVAL HOUR TO FRACTION(5) 
SybaseDatabase: time 
SybaseASADatabase: time 

timestamp 
MySQLDatabase: timestamp 
SQLiteDatabase: TEXT 
H2Database: TIMESTAMP 
PostgresDatabase: TIMESTAMP WITHOUT TIME ZONE 
UnsupportedDatabase: timestamp 
DB2Database: timestamp 
MSSQLDatabase: [datetime] 
OracleDatabase: TIMESTAMP 
HsqlDatabase: TIMESTAMP 
FirebirdDatabase: TIMESTAMP 
DerbyDatabase: TIMESTAMP 
InformixDatabase: DATETIME YEAR TO FRACTION(5) 
SybaseDatabase: datetime 
SybaseASADatabase: timestamp 

date 
MySQLDatabase: date 
SQLiteDatabase: date 
H2Database: date 
PostgresDatabase: date 
UnsupportedDatabase: date 
DB2Database: date 
MSSQLDatabase: [date] 
OracleDatabase: date 
HsqlDatabase: date 
FirebirdDatabase: date 
DerbyDatabase: date 
InformixDatabase: date 
SybaseDatabase: date 
SybaseASADatabase: date 

char 
MySQLDatabase: CHAR 
SQLiteDatabase: CHAR 
H2Database: CHAR 
PostgresDatabase: CHAR 
UnsupportedDatabase: CHAR 
DB2Database: CHAR 
MSSQLDatabase: [char](1) 
OracleDatabase: CHAR 
HsqlDatabase: CHAR 
FirebirdDatabase: CHAR 
DerbyDatabase: CHAR 
InformixDatabase: CHAR 
SybaseDatabase: CHAR 
SybaseASADatabase: CHAR 

varchar 
MySQLDatabase: VARCHAR 
SQLiteDatabase: VARCHAR 
H2Database: VARCHAR 
PostgresDatabase: VARCHAR 
UnsupportedDatabase: VARCHAR 
DB2Database: VARCHAR 
MSSQLDatabase: [varchar](1) 
OracleDatabase: VARCHAR2 
HsqlDatabase: VARCHAR 
FirebirdDatabase: VARCHAR 
DerbyDatabase: VARCHAR 
InformixDatabase: VARCHAR 
SybaseDatabase: VARCHAR 
SybaseASADatabase: VARCHAR 

nchar 
MySQLDatabase: NCHAR 
SQLiteDatabase: NCHAR 
H2Database: NCHAR 
PostgresDatabase: NCHAR 
UnsupportedDatabase: NCHAR 
DB2Database: NCHAR 
MSSQLDatabase: [nchar](1) 
OracleDatabase: NCHAR 
HsqlDatabase: CHAR 
FirebirdDatabase: NCHAR 
DerbyDatabase: NCHAR 
InformixDatabase: NCHAR 
SybaseDatabase: NCHAR 
SybaseASADatabase: NCHAR 

nvarchar 
MySQLDatabase: NVARCHAR 
SQLiteDatabase: NVARCHAR 
H2Database: NVARCHAR 
PostgresDatabase: VARCHAR 
UnsupportedDatabase: NVARCHAR 
DB2Database: NVARCHAR 
MSSQLDatabase: [nvarchar](1) 
OracleDatabase: NVARCHAR2 
HsqlDatabase: VARCHAR 
FirebirdDatabase: NVARCHAR 
DerbyDatabase: VARCHAR 
InformixDatabase: NVARCHAR 
SybaseDatabase: NVARCHAR 
SybaseASADatabase: NVARCHAR 

clob 
MySQLDatabase: LONGTEXT 
SQLiteDatabase: TEXT 
H2Database: CLOB 
PostgresDatabase: TEXT 
UnsupportedDatabase: CLOB 
DB2Database: CLOB 
MSSQLDatabase: [varchar](MAX) 
OracleDatabase: CLOB 
HsqlDatabase: CLOB 
FirebirdDatabase: BLOB SUB_TYPE TEXT 
DerbyDatabase: CLOB 
InformixDatabase: CLOB 
SybaseDatabase: TEXT 
SybaseASADatabase: LONG VARCHAR 

currency 
MySQLDatabase: DECIMAL 
SQLiteDatabase: REAL 
H2Database: DECIMAL 
PostgresDatabase: DECIMAL 
UnsupportedDatabase: DECIMAL 
DB2Database: DECIMAL(19, 4) 
MSSQLDatabase: [money] 
OracleDatabase: NUMBER(15, 2) 
HsqlDatabase: DECIMAL 
FirebirdDatabase: DECIMAL(18, 4) 
DerbyDatabase: DECIMAL 
InformixDatabase: MONEY 
SybaseDatabase: MONEY 
SybaseASADatabase: MONEY 

uuid 
MySQLDatabase: char(36) 
SQLiteDatabase: TEXT 
H2Database: UUID 
PostgresDatabase: UUID 
UnsupportedDatabase: char(36) 
DB2Database: char(36) 
MSSQLDatabase: [uniqueidentifier] 
OracleDatabase: RAW(16) 
HsqlDatabase: char(36) 
FirebirdDatabase: char(36) 
DerbyDatabase: char(36) 
InformixDatabase: char(36) 
SybaseDatabase: UNIQUEIDENTIFIER 
SybaseASADatabase: UNIQUEIDENTIFIER 

Dla porównania, to jest Groovy skrypt Użyłem do wygenerowania tego wyniku:

@Grab('org.liquibase:liquibase-core:3.5.1') 

import liquibase.database.core.* 
import liquibase.datatype.core.* 

def datatypes = [BooleanType,TinyIntType,IntType,MediumIntType,BigIntType,FloatType,DoubleType,DecimalType,NumberType,BlobType,DatabaseFunctionType,UnknownType,DateTimeType,TimeType,TimestampType,DateType,CharType,VarcharType,NCharType,NVarcharType,ClobType,CurrencyType,UUIDType] 
def databases = [MySQLDatabase, SQLiteDatabase, H2Database, PostgresDatabase, UnsupportedDatabase, DB2Database, MSSQLDatabase, OracleDatabase, HsqlDatabase, FirebirdDatabase, DerbyDatabase, InformixDatabase, SybaseDatabase, SybaseASADatabase] 
datatypes.each { 
    def datatype = it.newInstance() 
    datatype.finishInitialization("") 
    println datatype.name 
    databases.each { println "$it.simpleName: ${datatype.toDatabaseDataType(it.newInstance())}"} 
    println '' 
} 
+0

Skrypt do generowania listy był bardzo pomocny! – osundblad

+0

Uwaga! W PostgreSQL ** float ** daje ** podwójną precyzję ** (aka ** float8 **) –

+0

I gorzej: kolumnę typ danych "rzeczywisty" niepoprawnie przetłumaczony na "podwójną precyzję" dla PostgreSQL, patrz https://liquibase.jira.com/browse/CORE-2807 –

Powiązane problemy