Liquibase高阶使用
目录
- 一、依赖和配置
- 二、xml常用标签
- 三、Liquibase类型字典
一、依赖和配置
1.1.依赖
1 <!--liquibase--> 2 <dependency> 3 <groupId>org.liquibase</groupId> 4 <artifactId>liquibase-core</artifactId> 5 <version>4.0.0</version> 6 </dependency>
1.2.配置
只要依赖了 liquibase-core 默认可以不用做任何配置。如果我们用xml文件,则要修改change-log信息。
# spring.liquibase.enabled=true # spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.yaml
spring.liquibase.change-log=classpath:/db/master.xml
如果用yaml方式(这篇博客主要介绍的是xml方式,此处yaml可以跳过不看):我们新建一个同名yaml文件,放在默认的路径下,则已经完成了基本的配置,启动后会自动使用这里的内容。
databaseChangeLog:
# 支持 yaml 格式的 SQL 语法
- changeSet:
id: 1
author: Levin
changes:
- createTable:
tableName: person
columns:
- column:
name: id
type: int
autoIncrement: true
constraints:
primaryKey: true
nullable: false
- column:
name: first_name
type: varchar(255)
constraints:
nullable: false
- column:
name: last_name
type: varchar(255)
constraints:
nullable: false
- changeSet:
id: 2
author: Levin
changes:
- insert:
tableName: person
columns:
- column:
name: first_name
value: Marcel
- column:
name: last_name
value: Overdijk
# 同时也支持依赖外部SQL文件(TODO 个人比较喜欢这种)
- changeSet:
id: 3
author: Levin
changes:
- sqlFile:
encoding: utf8
path: classpath:db/changelog/sqlfile/test1.sql
test1.sql
INSERT INTO person (id, first_name, last_name) VALUES ('2', '哈哈', '呵呵');
二、xml常用标签
2.1.databaseChangeLog标签
liquibase的入口文件,这个标签可以引入你的版本修改文件。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <databaseChangeLog 3 xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 6 xmlns:pro="http://www.liquibase.org/xml/ns/pro" 7 xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd 8 http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd 9 http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd "> 10 </databaseChangeLog>
2.2.databaseChangeLog的子标签
| tag | Description |
|---|---|
| preConditions | 执行sql变更文件的前置条件 |
| property | 设置的属性的值 |
| changeSet | 要执行的更改 |
| include | 包含要执行的更改集的附加文件 |
| context | 上下文将被附加到(使用AND)所有变更集 |
2.2.1.preConditions标签
可以应用于<databaseChangeLog>标签或者<changeSet>标签。 示例:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <databaseChangeLog 4 xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 7 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd"> 8 <preConditions> 9 <dbms type="oracle" /> 10 <runningAs username="SYSTEM" /> 11 </preConditions> 12 13 <changeSet id="1" author="bob"> 14 <preConditions onFail="WARN"> 15 <sqlCheck expectedResult="0">select count(*) from oldtable</sqlCheck> 16 </preConditions> 17 <comment>Comments should go after preCondition. If they are before then liquibase usually gives error.</comment> 18 <dropTable tableName="oldtable"/> 19 </changeSet> 20 </databaseChangeLog>
上述的示例,是只有在Oracle数据库以及用户是SYSTEM时才会执行。
preConditions前置条件分为正常和异常情况: 正常情况下,无论返回的值是不是预料的值(0),oldtable都会被删除,只是如果不是预料的值,这里会给出WARN; 异常情况下,也就是如果oldtable不存在,删除oldtable的命令将不会执行。
1)处理失败和错误
| Attribute | Description |
|---|---|
| onFail | 当preConditions是失败情形下如何处理 |
| OnError | 当preConditions是错误情形下如何处理 |
| onSqlOutput | 在updateSQL模式下要做什么 |
| onFailMessage | 输出的失败信息 |
| onErrorMessage | 输出的错误信息 |
OnFail/OnError值可能配置的值
| Value | Description |
|---|---|
| HALT | 立即停止执行整个更改日志。 [默认] |
| CONTINUE | 跳过* changeSet 。 下次更新时将再次尝试执行更改集。 继续 changelog *。 |
| MARK_RAN | 跳过更改集,但将其标记为已执行。继续更改日志。 |
| WARN | 输出警告并继续照常执行* changeSet * / * changelog *。 |
onSqlOutput可能配置的值
| Value | Description |
|---|---|
| TEST | 在updateSQL模式下运行changeSet |
| FAIL | 使preConditons在updateSQL模式下失败 |
| IGNORE | 忽略updateSQL模式中的preConditons(默认)。 |
2)and/or/not逻辑
可以使用nestable <and>、<or>和<not>标记将条件逻辑应用于前置条件。如果没有指定条件标记,则默认为AND。
示例:
1 <preConditions onFail="WARN"> 2 <dbms type="oracle" /> 3 <runningAs username="SYSTEM" /> 4 </preConditions>
这里就是默认值AND,也就是同时满足既是oracle数据库,并且用户必须是SYSTEM才会执行。
如果使数据更改可以在oracle和mysql中可以执行,需要用到or表达式:
1 <preConditions> 2 <or> 3 <dbms type="oracle" /> 4 <dbms type="mysql" /> 5 </or> 6 </preConditions>
复合条件,例如,是oracle数据库,并且用户必须是SYSTEM 或者 数据库是mysql,且用户需要为root时,可以这样写:
1 <preConditions> 2 <or> 3 <and> 4 <dbms type="oracle" /> 5 <runningAs username="SYSTEM" /> 6 </and> 7 <and> 8 <dbms type="mysql" /> 9 <runningAs username="root" /> 10 </and> 11 </or> 12 </preConditions>
3)可用的preConditions
-
<dbms>:如果针对指定类型执行的数据库匹配,则可以传递。
<dbms type="mysql" />
-
<runningAs>:执行执行的用户,匹配才可以传递。
<runningAs username="root" />
-
<changeSetExecuted>:如果指定的changeSet被执行了才可以传递。
<changeSetExecuted id="1" author="YoungLu" changeLogFile="classpath:liquibase/changelog/2020-02-11-change.xml" />
-
<columnExists>:如果数据库中的指定列存在则传递
<columnExists schemaName="young_webchat" tableName="y_user" columnName="username" />
-
<tableExists>:如果数据库中的表存在,则传递
<tableExists schemaName="young_webchat" tableName="y_user" />
-
<viewExists>:如果数据库中的视图存在,则传递
<viewExists schemaName="young_webchat" viewName="y_user_view" />
-
<foreignKeyConstraintExists>:如果外键存在则传递
<foreignKeyConstraintExists schemaName="young_webchat" foreignKeyName="y_user_log_fk" />
-
<indexExists>:如果索引存在则传递
<indexExists schemaName="young_webchat" indexName="y_user_idx" />
-
<sequenceExists>:如果序列存在则传递
<sequenceExists schemaName="young_webchat" sequenceName="y_user_seq" />
-
<primaryKeyExists>:如果主键存在则传递
<primaryKeyExists schemaName="young_webchat" primaryKeyName="y_user_id" />
-
<sqlCheck>:执行SQL检查。SQL必须返回具有单个值的单个行。
<sqlCheck expectedResult="1">SELECT COUNT(1) FROM pg_tables WHERE TABLENAME = 'myRequiredTable'</sqlCheck>
-
<changeLogPropertyDefined>:检查给定的changelog参数是否存在。如果一个值也是给定的,如果这个值与给定的值不相同那么它只会失败。
<changeLogPropertyDefined property="myproperty"/> <changeLogPropertyDefined property="myproperty" value="requiredvalue"/>
-
<customPrecondition>:可以通过创建实现liquibase.precondition的类来创建自定义前置条件。CustomPrecondition接口。自定义类的参数是通过基于子标记的反射设置的。参数作为字符串传递给自定义前置条件。
1 <customPrecondition className="com.example.CustomTableCheck"> 2 <param name="tableName" value="our_table"/> 3 <param name="count" value="42"/> 4 </customPrecondition>
2.2.2.Properties标签
为changelog定义一个参数。给定上下文 和/或 数据库的列表,该参数将仅在这些上下文 和/或 数据库中使用。
示例:
1 <databaseChangeLog 2 xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 5 xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd 6 http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> 7 8 <property name="clob.type" value="clob" dbms="oracle"/> 9 <property name="clob.type" value="longtext" dbms="mysql"/> 10 11 <changeSet id="1" author="joe"> 12 <createTable tableName="${table.name}"> 13 <column name="id" type="int"/> 14 <column name="${column1.name}" type="${clob.type}"/> 15 <column name="${column2.name}" type="int"/> 16 </createTable> 17 </changeSet> 18 </databaseChangeLog>
可用的配置项
| Attribute | Description |
|---|---|
| name | 表的数据库名称 |
| value | 所需列的表的名称 |
| context | 上下文,逗号分隔 |
| dbms | 要用于该changeSet 的数据库的类型。关键字all和none也可用。 |
| global | 定义属性是全局的还是局限于databaseChangeLog。“true”或“false”。 |
示例:
1 <property name="simpleproperty" value="somevalue"/> 2 <property name="clob.type" value="clob" dbms="oracle,h2"/> 3 <property name="clob.type" value="longtext" dbms="mysql"/> 4 <property name="myproperty" value="yes" context="common,test"/> 5 <property name="localproperty" value="foo" global="false"/>
1)类型、函数的兼容性(不建议这么用,直接用liquibase自带类型即可)
1 <property name="autoIncrement" value="true" dbms="mysql" global="true"/> 2 3 <!--clob类型--> 4 <property name="clob.type" value="longtext" dbms="mysql"/> 5 <property name="clob.type" value="clob" dbms="oracle, mssql, mariadb, postgresql"/> 6 7 <!--int,还是不建议用,因为oracle和sql server 很难表示对应的4 294 967 295--> 8 <property name="int_unsigned" value="int unsigned" dbms="mysql" global="true"/> 9 <property name="int_unsigned" value="int" dbms="oracle, mssql" global="true"/> 10 11 <!--tinyint可以直接用,但是mysql的数值范围是-128到127, oracle和sql server则是 0到255 --> 12 <!--tinyint_unsigned--> 13 <property name="tinyint_unsigned" value="tinyint unsigned" dbms="mysql" global="true"/> 14 <property name="tinyint_unsigned" value="tinyint" dbms="mssql" global="true"/> 15 <property name="tinyint_unsigned" value="Number(3, 0)" dbms="oracle" global="true"/> 16 17 <!--boolean,没必要写boolean的兼容配置,想用的话直接用boolean就可以,liquibase会自动处理好--> 18 <property name="boolean" value="tinyint" dbms="mysql" global="true"/> 19 <property name="boolean" value="number(1, 0)" dbms="oracle" global="true"/> 20 <property name="boolean" value="bit" dbms="mssql" global="true"/> 21 22 <!-- Long整型存储 --> 23 <property name="bigint" value="bigint" dbms="mysql" global="true"/> 24 <property name="bigint" value="number(20,0)" dbms="oracle,mssql" global="true"/> 25 26 <!-- Nvarchar兼容配置 --> 27 <property name="nvarchar" value="varchar" dbms="mysql" global="true"/> 28 <property name="nvarchar" value="nvarchar" dbms="oracle,mssql" global="true"/> 29 30 <!--float--> 31 <property name="floatType" value="float4" dbms="postgresql, h2"/> 32 <property name="floatType" value="float" dbms="mysql, oracle, mssql, mariadb"/> 33 34 <!-- 当前日期 --> 35 <property name="now" value="now()" dbms="h2"/> 36 <property name="now" value="now()" dbms="mysql"/> 37 <property name="now" value="getutcdate()" dbms="mssql"/> 38 <property name="now" value="sysdate" dbms="oracle"/> 39 40 <property name="uuidType" value="varchar(36)" dbms="h2, mysql, mariadb"/> 41 <property name="sequenceSchemaName" value="YHY" dbms="oracle, mssql"/> 42
2.2.3. changeSet标签
将一个个数据库更改分开
示例:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <databaseChangeLog 4 xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xmlns:pro="http://www.liquibase.org/xml/ns/pro" 7 xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd 8 http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd"> 9 <changeSet id="1" author="bob"> 10 <comment>A sample change log</comment> 11 <createTable/> 12 </changeSet> 13 <changeSet id="2" author="bob" runAlways="true"> 14 <alterTable/> 15 </changeSet> 16 <changeSet id="3" author="alice" failOnError="false" dbms="oracle"> 17 <alterTable/> 18 </changeSet> 19 <changeSet id="4" author="alice" failOnError="false" dbms="!oracle"> 20 <alterTable/> 21 </changeSet> 22 23 </databaseChangeLog>
一般主要由“id” 、“author”、changelog文件路径名组成
3.1.可用的属性值
| 属性 | 描述 |
|---|---|
| id | 唯一识别,不一定是数字 |
| author | 作者 |
| dbms | 数据库类型 |
| runAlways | 在每次运行时执行changeset ,即使之前已经运行过 |
| runOnChange | 在第一次看到更改时执行更改,并且在每次changeset 时执行更改 |
| context | 控制是否执行changeset,这取决于运行时设置。任何字符串都可以用于上下文名称,它们被不区分大小写地选中。 |
| labels | 控制是否执行changeset,这取决于运行时设置。任何字符串都可以用于标签名称,并且不区分大小写地选中它们。 |
| runInTransaction | 是否应该将changeset作为单个事务运行(如果可能的话)?默认值为true。 |
| failOnError | 如果在执行changeset时发生错误,迁移是否应该失败 |
| objectQuotingStrategy | 这控制了在生成的SQL中如何引用对象名,或者在对数据库的调用中如何使用对象名。不同的数据库对对象的名称执行不同的操作,例如Oracle将所有内容都转换为大写(除非使用引号)。有三个可能的值。默认值是LEGACY。三个配置的值: LEGACY - Same behavior as in Liquibase 2.0 QUOTE_ALL_OBJECTS - 每个对象都加上双引号 :person becomes “person”.QUOTE_ONLY_RESERVED_WORDS - 在保留关键字和可用列名上面加双引号 |
3.2.可用的子标签
1)comment
注释
2)preConditions
前置条件,例如做一些不可逆操作前的必要检查
3)Any Refactoring Tag(s)
<Any Refactoring Tag(s)>要作为这个更改集的一部分运行的数据库更改
4)validCheckSum
添加一个校验和,不管数据库中存储了什么,它都被认为对这个changeset是有效的。主要用于需要更改changeset,并且不希望在已经运行了changeset的数据库上抛出错误(不推荐使用此过程)
5)rollback
描述如何回滚更改集的SQL语句或重构标记
rollback标签的示例:
1 <changeSet id="1" author="bob"> 2 <createTable tableName="testTable"> 3 <rollback> 4 drop table testTable 5 </rollback> 6 </changeSet> 7 <changeSet id="1" author="bob"> 8 <createTable tableName="testTable"> 9 <rollback> 10 <dropTable tableName="testTable"/> 11 </rollback> 12 </changeSet> 13 <changeSet id="2" author="bob"> 14 <dropTable tableName="testTable"/> 15 <rollback changeSetId="1" changeSetAuthor="bob"/> 16 </changeSet>
这里发生了回滚,会调用id为1的changeSet 。
6)createIndex
【强制】主键索引名为pk字段名;唯一索引名为uk字段名;普通索引名则为idx字段名。 说明:pk 即primary key;uk_ 即 unique key;idx_ 即index的简称。
-
普通索引名称以IDX为前缀。
-
单字段索引的命名方式为:IDX表名字段名,表名无须前缀,命名长度太长时表名和字段名可以考虑缩写。
-
多字段联合索引命名方式同单字段,考虑长度限制,可以只列出主要字段名或者采用缩写方式描述索引字段。 示例: \1. 错误命名:IDX_USER_INFO,没有给出字段名 \2. 错误命名:IDX_USER_INFO_DEPT_CODE,前缀错误。
1 <changeSet id="20200509001" author="dongfang"> 2 <createIndex tableName="worker" indexName="idx_name"> 3 <column name="name"></column> 4 </createIndex> 5 <createIndex tableName="worker" indexName="idx_address_tel"> 6 <column name="address"></column> 7 <column name="tel"></column> 8 </createIndex> 9 </changeSet>
7)column
可以是单标签,也可以是双标签。双标签可以嵌套 <constraints /> 标签
8)addPrimaryKey
<addPrimaryKey columnNames="event_id, name" tableName="c_sys_persist_audit_evt_data"/>
9)addNotNullConstraint
1 <addNotNullConstraint columnName="password_hash" 2 columnDataType="varchar(60)" 3 tableName="c_usr_user"/>
10)addForeignKeyConstraint
1 <addForeignKeyConstraint baseColumnNames="event_id" 2 baseTableName="c_sys_persist_audit_evt_data" 3 constraintName="fk_evt_pers_audit_evt_data" 4 referencedColumnNames="event_id" 5 referencedTableName="c_sys_persistent_audit_event"/>
11)dropDefaultValue
<dropDefaultValue tableName="c_sys_common_menu" columnName="created_date" columnDataType="datetime"/>
12)loadData
1 <loadData 2 file="config/liquibase/project/user/fake-data/common_menu.csv" 3 separator=";" 4 tableName="c_sys_common_menu"> 5 <column name="id" type="numeric"/> 6 <column name="created_by" type="string"/> 7 <column name="created_date" type="datetime"/> 8 <!-- jhipster-needle-liquibase-add-loadcolumn - JHipster (and/or extensions) can add load columns here, do not remove--> 9 </loadData>
2.2.4.include标签
将change-logs拆分为易于管理的部分。
例如:
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd"> <include file="com/example/news/news.changelog.xml"/> <include file="com/example/directory/directory.changelog.xml"/> </databaseChangeLog>
可用的配置项
| Attribute | Description |
|---|---|
| file | 被引入的文件 |
| relativeToChangelogFile | 用文件的相对路径而不是classpath |
| context | 向所有包含的changeSets追加上下文(使用AND) |
三、liquibase数据类型完整列表(重要),这里的换行没有全部整理好
1、boolean
MySQL:BIT(1),经测试确实是bit(1)
MSSQL:[bit]
Oracle:NUMBER(1)
SQLite:BOOLEAN
H2:BOOLEAN
PostgresDatabase:BOOLEAN
Unsupported:BOOLEAN
DB2:SMALLINT
Hsql:BOOLEAN
FirebirdDatabase:SMALLINT
DerbyDatabase:SMALLINT
InformixDatabase :BOOLEAN
SybaseDatabase:BIT
SybaseASADatabase:BIT
2、tinyint
MySQL:TINYINT
MSSQL:[tinyint]
Oracle:NUMBER(3)
SQLiteDatabase:TINYINT
H2Database:TINYINT
PostgresDatabase:SMALLINT
UnsupportedDatabase:TINYINT
DB2Database:SMALLINT
HsqlDatabase:TINYINT
FirebirdDataba se:SMALLINT
DerbyDatabase:SMALLINT
InformixDatabase:TINYINT
SybaseDatabase:TINYINT
SybaseASADatabase:TINYINT
3、int
MySQL:INT
MSSQL:[int]
Oracle:INTEGER
SQLiteDatabase:INTEGER
H2Database:INT
PostgresDatabase:INT
UnsupportedDatabase:INT
DB2Database:INTEGER
HsqlDatabase:INT
FirebirdDatabase:INT
DerbyDatabase:INTEGER
InformixDatabase:INT
SybaseDatabase:INT
SybaseASADatabase:INT
4、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
5、bigint
MySQL:BIGINT
MsSQL:[bigint]
Oracle:NUMBER(38,0)
SQLiteDatabase:BIGINT
H2Database:BIGINT
PostgresDatabase:BIGINT
UnsupportedDatabase:BIGINT
DB2Database:BIGINT
HsqlDatabase:BIGINT
FirebirdDatabase:BIGINT
DerbyDatabase:BIGINT
InformixDatabase:INT8
SybaseDatabase:BIGINT
SybaseASADatabase: BIGINT
6、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
7、 double
MySQL:DOUBLE
MSSQL:[float](53)
Oracle:FLOAT(24)
SQLiteDatabase:DOUBLE
H2Database:DOUBLE
PostgresDatabase:DOUBLE
PRECISION UnsupportedDatabase:DOUBLE
DB2Database:DOUBLE
HsqlDatabase:DOUBLE
FirebirdDatabase:DOUBLE PRECISION
DerbyDatabase:DOUBLE
InformixDatabase:DOUBLE PRECISION
SybaseDatabase:DOUBLE
SybaseASADatabase:DOUBLE
8、decimal
MySQL:DECIMAL
MSSQL:[decimal](18,0)
Oracle:DECIMAL
SQLiteDatabase:DECIMAL
H2Database:DECIMAL
PostgresDatabase:DECIMAL
UnsupportedDatabase:DECIMAL
DB2Database:DECIMAL
HsqlDatabase:DECIMAL
FirebirdDatabase:DECIMAL
DerbyDatabase:DECIMAL
InformixDatabase:DECIMAL
SybaseDatabase:DECIMAL
SybaseASADatabase:DECIMAL
9、number
MySQL:numeric,经测试会是decimal(10, 0)
MSSQL:[numeric](18,0)
Oracle:NUMBER
SQLiteDatabase:NUMBER
H2数据库:NUMBER
PostgresDatabase:numeric
UnsupportedDatabase:NUMBER
DB2Database:numeric
HsqlDatabase:numeric
FirebirdDatabase:numeric
DerbyDatabase:numeric
InformixDatabase:numeric
SybaseDatabase:numeric
SybaseASADatabase:numeric
10、blob
MySQL:LONGBLOB,经测试是blob
MSSQL:[varbinary](MAX)
Oracle:BLOB
SQLiteDatabase:BLOB H2Database:BLOB PostgresDatabase:BYTEA
UnsupportedDatabase:BLOB DB2Database:BLOB
HsqlDatabase: BLOB FirebirdDatabase:BLOB DerbyDatabase:BLOB
InformixDatabase:BLOB SybaseDatabase:IMAGE SybaseASADatabase:LONG BINARY
11、clob
MySQL:LONGTEXT
MSSQL:[varchar](MAX)
Oracle:CLOB
SQLiteDatabase:TEXT
H2 :CLOB
PostgresDatabase:TEXT
UnsupportedDatabase:CLOB
DB2Database:CLOB
HsqlDatabase:CLOB
FirebirdDatabase:BLOB
SUB_TYPE TEXT
DerbyDatabase:CLOB
InformixDatabase :CLOB
SybaseDatabase:TEXT
SybaseASADatabase:LONG VARCHAR
12、 function
MySQL: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
13、 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
14、datetime
MySQL:datetime
MSSQL:[datetime]
Oracle:TIMESTAMP
SQLiteDatabase:TEXT
H2Database:TIMESTAMP
PostgresDatabase:TIMESTAMP WITHOUT TIME ZONE
UnsupportedDatabase:datetime
DB2Database:TIMESTAMP
HsqlDatabase:TIMESTAMP
FirebirdDatabase:TIMESTAMP
DerbyDatabase:TIMESTAMP
InformixDatabase:DATETIME年份分数(5)
SybaseDatabase:datetime
SybaseASADatabase:datetime
15、time
MySQL:time
MSSQL:[time](7)
Oracle:DATE
SQLiteDatabase:time
H2Database:time
PostgresDatabase:TIME WITHOUT TIME ZONE
UnsupportedDatabase:time
DB2Database:time
HsqlDatabase:time
FirebirdDatabase:time DerbyDatabase:time
InformixDatabase:INTERVAL HOUR TO FRACTION(5)
SybaseDatabase:time
SybaseASADatabase:time
16、timestamp
MySQL:timestamp
MSSQL:[datetime]
Oracle:TIMESTAMP
SQLiteDatabase:TEXT
H2Database:TIMESTAMP
PostgresDatabase:TIMESTAMP WITHOUT TIME ZONE
UnsupportedDatabase:timestamp
DB2Database:timestamp
HsqlDatabase:TIMESTAMP
FirebirdDatabase:TIMESTAMP
DerbyDatabase:TIMESTAMP
InformixDatabase:DATETIME年份分数(5)
SybaseDatabase:datetime
SybaseASADatabase: timestamp
17、date
MySQL:date
MSSQL:[date]
Oracle:date
SQLiteDatabase:date
H2Database:date
PostgresDatabase:date
UnsupportedDatabase:date
DB2Database :date
HsqlDatabase:date
FirebirdDatabase:date
DerbyDatabase:date
InformixDatabase:date
SybaseDatabase:date
SybaseASADatabase:date
18、char
MySQL:CHAR
MSSQL:[char](1)
Oracle:CHAR
SQLiteDatabase:CHAR
H2Database:CHAR
PostgresDatabase:CHAR
UnsupportedDatabase:CHAR
DB2Database:CHAR
HsqlDatabase:CHAR
FirebirdDatabase:CHAR
DerbyDatabase:CHAR
InformixDatabase:CHAR
SybaseDatabase:CHAR
SybaseASADatabase:CHAR
19、varchar
MySQL:VARCHAR
MSSQL:[varchar](1)
Oracle:VARCHAR2
SQLiteDatabase:VARCHAR
H2Database:VARCHAR
PostgresDatabase:VARCHAR
UnsupportedDatabase: VARCHAR
DB2Database:VARCHAR
HsqlDatabase:VARCHAR
FirebirdDatabase:VARCHAR
DerbyDatabase:VARCHAR
InformixDatabase:VARCHAR
SybaseDatabase:VARCHAR
SybaseASADatabase:VARCHAR
20、nchar
MySQL:NCHAR
MSSQL:[nchar](1)
Oracle:NCHAR
SQLiteDatabase:NCHAR
H2Database:NCHAR
PostgresDatabase:NCHAR
UnsupportedDatabase:NCHAR
DB2Database:NCHAR
HsqlDatabase:CHAR
FirebirdDatabase:NCHAR
DerbyDatabase:NCHAR
InformixDatabase:NCHAR
SybaseDatabase:NCHAR
SybaseASADatabase:NCHAR
21、nvarchar
MySQL:NVARCHAR,经测试,mysql还是用的varchar,但是mysql的varchar就相当于nvarchar。
MSSQL:[nvarchar](1)
Oracle:NVARCHAR2
SQLiteDatabase:NVARCHAR
H2Database:NVARCHAR
PostgresDatabase:VARCHAR
UnsupportedDatabase:NVARCHAR
DB2Database:NVARCHAR
HsqlDatabase:VARCHAR
FirebirdDatabase:NVARCHAR
DerbyDatabase: VARCHAR
InformixDatabase:NVARCHAR
SybaseDatabase:NVARCHAR
SybaseASADatabase:NVARCHAR
22、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
23、uuid
MySQL:char(36)
MSSQL:[uniqueidentifier]
Oracle:RAW(16)
SQLite:TEXT
H2Database:UUID
PostgresDatabase:UUID
UnsupportedDatabase:char(36)
DB2Database:char(36 )
HsqlDatabase:char(36)
FirebirdDatabas e:char(36)
DerbyDatabase:char(36)
InformixDatabase:char(36)
SybaseDatabase:UNIQUEIDENTIFIER
SybaseASADatabase:UNIQUEIDENTIFIER
参考博客:https://blog.csdn.net/a112626290/article/details/104263790
也借鉴了外文博客,算是整理的文章,不再各个标明出处,一并感谢。
浙公网安备 33010602011771号