Drizzle | 将空数组作为默认值
This guide assumes familiarity with:
- 开始使用 PostgreSQL、MySQL 和 SQLite
- 了解 PostgreSQL、MySQL 和 SQLite 的列数据类型
- sql 操作符
PostgreSQL
要在 PostgreSQL 中将空数组设置为默认值,可以使用 sql
操作符和 '{}'
或 ARRAY[]
语法:
import { sql } from 'drizzle-orm';
import { pgTable, serial, text } from 'drizzle-orm/pg-core';
export const users = pgTable('users', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
tags1: text('tags1')
.array()
.notNull()
.default(sql`'{}'::text[]`),
tags2: text('tags2')
.array()
.notNull()
.default(sql`ARRAY[]::text[]`),
});
CREATE TABLE IF NOT EXISTS "users" (
"id" serial PRIMARY KEY NOT NULL,
"name" text NOT NULL,
"tags1" text[] DEFAULT '{}'::text[] NOT NULL,
"tags2" text[] DEFAULT ARRAY[]::text[] NOT NULL
);
MySQL
MySQL 没有数组数据类型,但可以使用 json
数据类型来达到相同的目的。要在 MySQL 中将空数组设置为默认值,可以使用 JSON_ARRAY()
函数或 sql
操作符和 ('[]')
语法:
import { sql } from 'drizzle-orm';
import { json, mysqlTable, serial, varchar } from 'drizzle-orm/mysql-core';
export const users = mysqlTable('users', {
id: serial('id').primaryKey(),
name: varchar('name', { length: 255 }).notNull(),
tags1: json('tags1').$type<string[]>().notNull().default([]),
tags2: json('tags2')
.$type<string[]>()
.notNull()
.default(sql`('[]')`), // 与 default([]) 相同
tags3: json('tags3')
.$type<string[]>()
.notNull()
.default(sql`(JSON_ARRAY())`),
});
CREATE TABLE `users` (
`id` serial AUTO_INCREMENT NOT NULL,
`name` varchar(255) NOT NULL,
`tags1` json NOT NULL DEFAULT ('[]'),
`tags2` json NOT NULL DEFAULT ('[]'),
`tags3` json NOT NULL DEFAULT (JSON_ARRAY()),
CONSTRAINT `users_id` PRIMARY KEY(`id`)
);
mode
选项定义了应用中如何处理值。在 json
模式下,值被视为 JSON 对象字面量。
您可以为 JSON 对象推断指定 .$type<..>()
,它不会检查运行时值。它为默认值、插入和选择模式提供了编译时保护。
SQLite
SQLite 没有数组数据类型,但可以使用 text
数据类型来达到相同目的。要在 SQLite 中将空数组设置为默认值,可以使用 json_array()
函数或 sql
操作符和 '[]'
语法:
import { sql } from 'drizzle-orm';
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';
export const users = sqliteTable('users', {
id: integer('id').primaryKey(),
tags1: text('tags1', { mode: 'json' })
.notNull()
.$type<string[]>()
.default(sql`(json_array())`),
tags2: text('tags2', { mode: 'json' })
.notNull()
.$type<string[]>()
.default(sql`'[]'`),
});
CREATE TABLE `users` (
`id` integer PRIMARY KEY NOT NULL,
`tags1` text DEFAULT (json_array()) NOT NULL,
`tags2` text DEFAULT '[]' NOT NULL
);
mode
选项定义了应用中如何处理值。在 json
模式下,值被视为 JSON 对象字面量。
您可以为 JSON 对象推断指定 .$type<..>()
,它不会检查运行时值。它为默认值、插入和选择模式提供了编译时保护。