以下是 Sequelize 中所有可解构的数据类型列表,包含详细说明和示例:
1. 基础数值类型
| 类型 | 说明 | 示例 |
| INTEGER | 整数类型 | age: { type: INTEGER } |
| TINYINT | 小整数(范围:-128~127,常用于布尔值) | isActive: { type: TINYINT } |
| SMALLINT | 短整数(范围:-32768~32767) | quantity: { type: SMALLINT } |
| MEDIUMINT | 中等整数(范围:-8388608~8388607,MySQL 专用) | views: { type: MEDIUMINT } |
| BIGINT | 大整数(范围:-2^63 ~ 2^63-1) | id: { type: BIGINT, primaryKey: true } |
| FLOAT | 浮点数(可指定精度) | price: { type: FLOAT(10, 2) } // 总位数10,小数点后2位 |
| DOUBLE | 双精度浮点数 | distance: { type: DOUBLE } |
| DECIMAL | 精确小数(适合金额) | amount: { type: DECIMAL(10, 2) } // 10位总长度,2位小数 |
| REAL | 单精度浮点数(类似 FLOAT,PostgreSQL 专用) | score: { type: REAL } |
2. 字符串与文本
| 类型 | 说明 | 示例 |
| STRING | 可变长度字符串(默认长度 255) | name: { type: STRING(100) } // 最大长度100 |
| CHAR | 定长字符串 | code: { type: CHAR(10) } |
| TEXT | 长文本(无长度限制) | content: { type: TEXT } |
| UUID | UUID 字符串(常用于分布式唯一标识) | id: { type: UUID, defaultValue: Sequelize.UUIDV4 } |
| ENUM | 枚举值(限定字段值范围) | status: { type: ENUM('pending', 'success', 'failed') } |
3. 时间与日期
| 类型 | 说明 | 示例 |
| DATE | 日期+时间(含时区,默认存储为 UTC) | createdAt: { type: DATE, defaultValue: Sequelize.NOW } |
| DATEONLY | 仅日期(格式 YYYY-MM-DD) | birthday: { type: DATEONLY } |
| TIME | 仅时间(格式 HH:mm:ss) | startTime: { type: TIME } |
| NOW | 插入时自动设置为当前时间(需配合 defaultValue) | createdAt: { type: DATE, defaultValue: Sequelize.NOW } |
4. 二进制与高级类型
| 类型 | 说明 | 示例 |
| BLOB | 二进制数据(如图片、文件) | image: { type: BLOB } |
| JSON | JSON 数据(通用数据库) | metadata: { type: JSON } |
| JSONB | 二进制 JSON(PostgreSQL 专用,支持索引和查询) | profile: { type: JSONB } |
| ARRAY | 数组(PostgreSQL 专用) | tags: { type: ARRAY(STRING) } // 字符串数组 |
| GEOMETRY | 地理空间数据(需数据库支持,如 PostgreSQL + PostGIS) | location: { type: GEOMETRY('POINT') } // 存储经纬度坐标 |
| VIRTUAL | 虚拟字段(不存储到数据库,用于计算) | fullName: { type: VIRTUAL, get() { return this.first + ' ' + this.last } } |
5. 其他类型
| 类型 | 说明 | 示例 |
| BOOLEAN | 布尔值(存储为 true/false 或 1/0) | isPublished: { type: BOOLEAN, defaultValue: false } |
| CITEXT | 不区分大小写的文本(PostgreSQL 专用) | username: { type: CITEXT } |
6.完整示例代码
7. 关键注意事项
数据库兼容性:
- JSONB、ARRAY、CITEXT 仅 PostgreSQL 支持。
- GEOMETRY 需要 PostGIS 扩展。
默认值:
- 时间类型常用 Sequelize.NOW 自动填充。
- UUID 使用 defaultValue: Sequelize.UUIDV4 生成随机值。
虚拟字段:
- 不参与数据库读写,但可通过模型访问。
长度限制:
- STRING(n)、CHAR(n) 可指定长度,TEXT 无长度限制。
建议结合业务需求选择类型,例如:
- 精确数值 → DECIMAL
- 唯一标识 → UUID
- 动态结构数据 → JSON/JSONB
- 地理数据 → GEOMETRY