Other Data Types - 其他数据类型
除了模型基础指南中提到的最常见的数据类型外,Sequelize 还提供了其他几种数据类型.
范围 (仅限 PostgreSQL)
DataTypes.RANGE(DataTypes.INTEGER) // int4range
DataTypes.RANGE(DataTypes.BIGINT) // int8range
DataTypes.RANGE(DataTypes.DATE) // tstzrange
DataTypes.RANGE(DataTypes.DATEONLY) // daterange
DataTypes.RANGE(DataTypes.DECIMAL) // numrange
由于范围类型对于它们绑定的 包含/排除 具有额外的信息,因此仅使用元组在 javascript 中表示它们并不是很容易.
当提供范围值时,可以从以下 API 中进行选择:
// 默认为包含下限,排除上限
const range = [
new Date(Date.UTC(2016, 0, 1)),
new Date(Date.UTC(2016, 1, 1))
];
// '["2016-01-01 00:00:00+00:00", "2016-02-01 00:00:00+00:00")'
// 控制包含
const range = [
{ value: new Date(Date.UTC(2016, 0, 1)), inclusive: false },
{ value: new Date(Date.UTC(2016, 1, 1)), inclusive: true },
];
// '("2016-01-01 00:00:00+00:00", "2016-02-01 00:00:00+00:00"]'
// 复合形式
const range = [
{ value: new Date(Date.UTC(2016, 0, 1)), inclusive: false },
new Date(Date.UTC(2016, 1, 1)),
];
// '("2016-01-01 00:00:00+00:00", "2016-02-01 00:00:00+00:00")'
const Timeline = sequelize.define('Timeline', {
range: DataTypes.RANGE(DataTypes.DATE)
});
await Timeline.create({ range });
然而,检索到的范围值始终以对象数组的形式出现. 例如,如果在 finder 查询后,存储的值是 ("2016-01-01 00:00:00+00:00", "2016-02-01 00:00:00+00:00"]
你会得到:
[
{ value: Date, inclusive: false },
{ value: Date, inclusive: true }
]
使用范围类型更新实例后,你需要调用 reload()
或使用 returning: true
参数.
特别案例
// 空范围:
Timeline.create({ range: [] }); // range = 'empty'
// 无界范围:
Timeline.create({ range: [null, null] }); // range = '[,)'
// range = '[,"2016-01-01 00:00:00+00:00")'
Timeline.create({ range: [null, new Date(Date.UTC(2016, 0, 1))] });
// 无限范围:
// range = '[-infinity,"2016-01-01 00:00:00+00:00")'
Timeline.create({ range: [-Infinity, new Date(Date.UTC(2016, 0, 1))] });
网络地址
Sequelize DataType | PostgreSQL | MariaDB | MySQL | MSSQL | SQLite | Snowflake | db2 | ibmi |
---|---|---|---|---|---|---|---|---|
CIDR | CIDR | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
INET | INET | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
MACADDR | MACADDR | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
Arrays (仅 PostgreSQL)
// 定义 DataTypes.SOMETHING 的数组.
DataTypes.ARRAY(/* DataTypes.SOMETHING */)
// 示例
// VARCHAR(255)[]
DataTypes.ARRAY(DataTypes.STRING)
// VARCHAR(255)[][]
DataTypes.ARRAY(DataTypes.ARRAY(DataTypes.STRING))
BLOB
DataTypes.BLOB // BLOB (PostgreSQL 的 bytea)
DataTypes.BLOB('tiny') // TINYBLOB (PostgreSQL 的 bytea)
DataTypes.BLOB('medium') // MEDIUMBLOB (PostgreSQL 的 bytea)
DataTypes.BLOB('long') // LONGBLOB (PostgreSQL 的 bytea)
Blob 数据类型允许你将数据既作为字符串又作为缓冲区插入. 但是,当使用 Sequelize从 数据库中检索 Blob 时,将始终将其作为缓冲区检索.
ENUM
ENUM 是仅接受几个值(指定为列表)的数据类型.
DataTypes.ENUM('foo', 'bar') // 允许值为'foo'和'bar'的ENUM
也可以使用列定义的 values
字段指定 ENUM,如下所示:
sequelize.define('foo', {
states: {
type: DataTypes.ENUM,
values: ['active', 'pending', 'deleted']
}
});