# 数据类型

MatrixOne 数据类型定义与 MySQL 习惯大体一致，并扩展了 **VECTOR**、**DATALINK** 等类型。下表给出产品侧常用类型与范围摘要；未列出的细节以实例引擎行为为准。

## 整数

| 类型 | 存储 | 有符号范围（摘要） | 无符号 |
| --- | --- | --- | --- |
| TINYINT | 1 字节 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 字节 | -32768 ~ 32767 | 0 ~ 65535 |
| INT | 4 字节 | 约 ±2.1e9 | 0 ~ 约 4.2e9 |
| BIGINT | 8 字节 | 约 ±9.2e18 | 0 ~ 约 1.8e19 |

## 浮点与精确小数

| 类型 | 说明 |
| --- | --- |
| FLOAT / FLOAT32 | 单精度；可写 `FLOAT(M,D)` 控制显示精度（M、D 有上限） |
| DOUBLE / FLOAT64 | 双精度；可写 `DOUBLE(M,D)` |
| DECIMAL | 精确数值；适合金额等需定点的场景 |

浮点有舍入误差；财务与计数优先 `DECIMAL`。

## 字符串与二进制

| 类型 | 说明 |
| --- | --- |
| CHAR / VARCHAR | 定长 / 变长字符串 |
| BINARY / VARBINARY | 二进制串 |
| TEXT / BLOB | 长文本 / 二进制大对象（不区分 TINY/MEDIUM/LONG 等子类型命名时按统一大对象处理） |
| ENUM | 枚举：取值来自预定义字符串列表，内部以整数表示 |
| BIT(M) | 位串，M 为 1~64，默认 1 |

## 日期与时间

| 类型 | 说明 |
| --- | --- |
| DATE | 日期 |
| TIME | 时间 |
| DATETIME | 日期时间 |
| TIMESTAMP | 时间戳（时区相关行为受 `time_zone` 等影响） |
| YEAR | 年份 |

`TIMESTAMP` 默认值、`ON UPDATE` 等初始化规则与 MySQL 类似，但以当前实例支持情况为准。

## JSON

用于存储 JSON 文档。可用 `JSON_EXTRACT`、`JSON_EXTRACT_STRING`、`JSON_EXTRACT_FLOAT64`、`JQ` / `TRY_JQ` 等函数查询与变换（见[函数](functions.md)）。

## UUID

UUID 类型，配合 `UUID()` 等函数生成通用唯一标识。

## DATALINK

指向外部或 Stage 等路径上的文件资源，可与 `LOAD_FILE` / `SAVE_FILE` 等配合，用于非结构化或文件型数据引用（能力随产品开放范围而定）。

## VECTOR（向量）

面向 embedding / 相似度检索：

| 要点 | 说明 |
| --- | --- |
| 元素类型 | 目前为 `vecf32`（float32）、`vecf64`（float64） |
| 维度 | 建列时指定，如 `vecf32(768)`；维度上限很高（文档常见上限约 65536） |
| 形态 | 一维向量，不是通用多维矩阵 |
| 约束 | **不能**作为主键或唯一键 |
| 检索 | 配合 `L2_DISTANCE`、`COSINE_SIMILARITY`、`INNER_PRODUCT` 等与向量索引（如 IVF Flat）使用 |

```sql
CREATE TABLE t1 (
  id INT,
  emb vecf32(3)
);
```

插入格式支持字面量数组等形式（具体字面量写法以客户端与版本为准）。

## 类型转换

- 隐式转换：表达式两侧类型不一致时，引擎按规则提升或转换；失败则报错。
- 显式转换：使用 `CAST()`、`CONVERT()`、`BINARY()` 等（见[运算符](operators.md)）。

## 相关页面

- [函数](functions.md)（含向量 / JSON）
- [SQL 语句](statements.md)（`CREATE TABLE` 等）
- [使用限制](limitations.md)
