---
order: 5
navTitle: dataTypes
---
# dataTypes - 字段类型配置

定义此数据库支持的所有支持的字段类型。

这里定义的字段类型，需要将当前数据库支持的字段类型描述清楚，并告诉 SuccApp 不同的字段在 SuccApp 中是什么数据类型，当跨库复制数据时，系统也许兼容识别javaJDBC的字段类型定义，这样在跨库迁移数据时能更准确的还原字段数据类型。

```json
	"dataTypes": {
        "TINYINT": {
			"type": "...",
			"dataType": "...",
            "javaTypes": ["..."],
			"matchLen": "...",
			"storageBytes": "...",
            "preffered": true|false,
            "storeCharacter": true|false
		}
	}

```

## 配置项{#conf-items}

#### type{#type}

定义数据库的字段类型，一般为数据库实际支持的数据类型。

1. 字段类型可以是带有参数的字符串，如`VARCHAR(?)`、`VARCHAR(?) BINARY`、`DECIMAL(?,?)`。
2. 数据库的字段类型最好参考官方文档进行配置，如[MySql支持的数据类型](https://dev.mysql.com/doc/refman/8.0/en/other-vendor-data-types.html)。

#### dataType{#datatype}

定义该字段类型在 SuccApp 中是什么数据类型，通常用字母表示。

数据类型如下所示：

- `C`：字符型
- `N`：浮点型
- `I`：整型
- `D`：日期型
- `T`：时间型
- `P`：时间戳型
- `M`：Clob类型
- `X`：Blob类型
- `J`：Json类型
- `U`：其他类型

#### javaTypes{#javatypes}

定义java JDBC规范中的数据类型。

通常要与数据库实际字段类型尽量匹配，可以定义多个，用`,`分隔。当其他数据库迁移数据到此库时，会根据这里的数据类型在当前数据库新建字段。

数据类型如下所示：

- **整型**：`TINYINT`、`SMALLINT`、`INTEGER`、`BIGINT`
- **浮点型**：`FLOAT`、`REAL`、`DOUBLE`、`DECIMAL`、`NUMERIC`
- **字符型**：`BIT`、`NUMERIC`、`CHAR`、`VARCHAR`、`NCHAR`、`NVARCHAR`、`BOOLEAN`
- **日期型**：`DATE`
- **时间型**：`TIME`、`TIME_WITH_TIMEZONE`、`TIMESTAMP_WITH_TIMEZONE`
- **时间戳型**：`TIMESTAMP`
- **Clob类型**：`CLOB`、`NCLOB`、`LONGVARCHAR`、`LONGNVARCHAR`
- **Blob类型**：`BINARY`、`VARBINARY`、`LONGVARBINARY`、`BLOB`
- **Json类型**：`SQLXML`
- **其他类型**：`NULL`、`OTHER`、`JAVA_OBJECT`、`DISTINCT`、`STRUCT`、`ARRAY`、`REF`、`DATALINK`、`ROWID`、`REF_CURSOR`

#### matchLen{#matchlen}

定义整型字段的长度匹配范围，当整数长度与字段类型中`matchLen`定义的范围相匹配时，会选择此字段类型创建字段，此属性仅对整型字段有效。

示例：

```json
	"TINYINT": {
		"type": "TINYINT",
		"dataType": "I",
		"matchLen": "1~2",
		"storageBytes": 1,
		"javaTypes": ["TINYINT"]
	}

```

:::tip 提示
用户修改整型字段长度后，若修改的长度超过了原来字段类型的最大长度，会重新根据`matchLen`定义的范围匹配合适的字段类型。
:::

#### storageBytes{#storagebytes}

定义字段类型实际存储的字节数，一般为数据库字段类型的字节数。

#### preffered{#preffered}

数据库创建字段时是否优先选择创建此类型的字段，默认为false。

数据库在创建字段时，会优先考虑定义了`preffered=true`的字段。对于整型字段，若定义了`matchLen`属性，先根据[matchLen](#matchlen)属性进行匹配，匹配不到就会使用定义了`preffered=true`的字段类型。

#### storeCharacter{#storecharacter}

说明此字段类型是否为字符存储，true表示字符存储，false表示byte存储，此属性对字符型字段有效。

:::tip 提示
SuccApp 通常会优先使用字符存储的字段，在进行跨库迁移时，从字符存储的字段迁移到目标库时也尽量使用字符存储的字段。
:::

#### alterTypes{#altertypes}

定义当前字段类型可以修改为哪些其他数据类型，默认为空。当此属性为空或者未定义时，修改字段类型遵循以下规则

1. 当表中存在数据时，blob、clob的字段类型总是不能修改为其他类型，其他类型也不能修改为blob或clob类型。
2. 一般默认除blob、clob字段以外的字段类型可以互相修改。
3. 对于不能修改的字段类型，若确实需要修改，系统将新建一个字段并尽量迁移老字段的数据过去。
