根据官方 SQLite 文档,
每个存储在 SQLite 数据库中的值(或被数据库引擎操作的值)
都具有以下存储类别之一:NULL
、INTEGER
、REAL
、TEXT
和 BLOB
。
我们对它们都提供了原生支持,如果这还不够,欢迎创建 自定义类型。
important
本部分文档中的所有示例均未使用数据库列名别名,列名是从 TypeScript 键生成的。
如果需要,您可以在列名中使用数据库别名,并且您还可以使用 casing
参数为 Drizzle 定义映射策略。
您可以在 这里 了解更多信息。
整数
一个有符号整数,存储为 0
、1
、2
、3
、4
、6
或 8
字节,具体取决于值的大小。
实数
一个浮点值,存储为 8-byte IEEE
浮点数。
文本
一个文本字符串,使用数据库编码(UTF-8
、UTF-16BE
或 UTF-16LE
)存储。
您可以定义 { enum: ["value1", "value2"] }
配置来推导 insert
和 select
类型,它 不会 检查运行时值。
BLOB
一个数据块,准确地按照输入存储。
建议使用 text('', { mode: 'json' })
而不是 blob('', { mode: 'json' })
,
因为它支持 JSON 函数:
目前所有 JSON 函数在其任何参数为 BLOB 时都会抛出错误,
因为 BLOB 保留用于将来增强功能,其中 BLOB 将存储 JSON 的二进制编码。
请参阅 **https://www.sqlite.org/json1.html**。
您可以为 blob 推导指定 .$type<..>()
,它 不会 检查运行时值。
它为默认值、插入和选择模式提供编译时保护。
布尔值
SQLite 没有原生的 boolean
数据类型,但您可以指定 integer
列为 boolean
模式。
这使您能够在代码中操作布尔值,
Drizzle 将它们存储为数据库中的 0 和 1 整数值。
大整数
由于 SQLite 中没有 bigint
数据类型,Drizzle 为 blob
列提供了一种特殊的 bigint
模式。
这种模式允许您在代码中处理 BigInt 实例,而 Drizzle 将它们作为 blob 值存储在数据库中。
---
自定义数据类型
每个列构建器都有一个 .$type()
方法,可以让您自定义列的数据类型。这在处理未知或品牌类型时非常有用。
非空
NOT NULL
约束指示关联列不得包含 NULL
值。
默认值
DEFAULT
子句指定在用户在执行 INSERT
操作时未明确提供值时,使用的默认值。
如果列定义中没有明确的 DEFAULT
子句,
则列的默认值为 NULL
。
一个明确的 DEFAULT
子句可以指定默认值为 NULL
、
字符串常量、blob 常量、有符号数字或任何用括号括起来的常量表达式。
默认值也可以是不区分大小写的特殊关键字 CURRENT_TIME
、CURRENT_DATE
或 CURRENT_TIMESTAMP
。
使用 $default()
或 $defaultFn()
,它们只是同一函数的不同别名,
您可以在运行时生成默认值并在所有插入查询中使用这些值。
这些函数可以帮助您利用各种实现,例如 uuid
、cuid
、cuid2
等等。
注意:该值不影响 drizzle-kit
的行为,它仅在 drizzle-orm
中用于运行时。
使用 $onUpdate()
或 $onUpdateFn()
,它们只是同一函数的不同别名,
您可以在运行时生成默认值并在所有更新查询中使用这些值。
向该列添加动态更新值。当行被更新时,将调用该函数,
如果未提供任何值,则返回的值将用作列值。
如果未提供默认值(或 $defaultFn 值),
当行被插入时也会调用该函数,并且返回的值将用作列值。
注意:该值不影响 drizzle-kit
的行为,它仅在 drizzle-orm
中用于运行时。