⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
数据类型

通用数据类型

下表列出了所有内置的通用数据类型。别名列中列出的替代名称也可以用来引用这些类型,但请注意,这些别名并非 SQL 标准的一部分,因此其他数据库引擎可能不支持。

名称 别名 描述
BIGINT INT8, LONG 有符号 8 字节整数
BIT BITSTRING 0 和 1 组成的字符串
BLOB BYTEA, BINARY, VARBINARY 变长二进制数据
BIGNUM   变长整数
BOOLEAN BOOL, LOGICAL 逻辑布尔值(true / false
DATE   日历日期(年、月、日)
DECIMAL(prec, scale) NUMERIC(prec, scale) 具有给定宽度(精度)和标度的定点数,默认 prec = 18scale = 3
DOUBLE FLOAT8, 双精度浮点数(8 字节)
FLOAT FLOAT4, REAL 单精度浮点数(4 字节)
HUGEINT   有符号 16 字节整数
INTEGER INT4, INT, SIGNED 有符号 4 字节整数
INTERVAL   日期 / 时间增量
JSON   JSON 对象(通过 json 扩展
SMALLINT INT2, SHORT 有符号 2 字节整数
TIME   一天中的时间(无时区)
TIMESTAMP WITH TIME ZONE TIMESTAMPTZ 结合了时间和日期,使用当前时区
TIMESTAMP DATETIME 结合了时间和日期
TINYINT INT1 有符号 1 字节整数
UBIGINT   无符号 8 字节整数
UHUGEINT   无符号 16 字节整数
UINTEGER   无符号 4 字节整数
USMALLINT   无符号 2 字节整数
UTINYINT   无符号 1 字节整数
UUID   UUID 数据类型
VARCHAR CHAR, BPCHAR, TEXT, STRING 变长字符字符串

多种类型之间可以进行隐式和显式类型转换,详情请参阅 类型转换 (Typecasting) 页面。

嵌套 / 复合类型

DuckDB 支持五种嵌套数据类型:ARRAYLISTMAPSTRUCTUNION。每种类型支持不同的使用场景并具有不同的结构。

名称 描述 在列中使用时的规则 从值构建 在 DDL/CREATE 中定义
ARRAY 相同数据类型的有序、定长数据序列。 每个 ARRAY 实例内,每一行必须具有相同的数据类型且元素数量必须相同。 [1, 2, 3] INTEGER[3]
LIST 相同数据类型的有序序列。 每个 LIST 实例内,每一行必须具有相同的数据类型,但元素数量可以任意。 [1, 2, 3] INTEGER[]
MAP 多个命名值的字典,每个键具有相同的类型,每个值具有相同的类型。键和值可以是任何类型,且彼此类型可以不同。 不同行可以有不同的键。 map([1, 2], ['a', 'b']) MAP(INTEGER, VARCHAR)
STRUCT 多个命名值的字典,其中每个键都是字符串,但每个键对应的值可以具有不同的类型。 每一行必须具有相同的键。 {'i': 42, 'j': 'a'} STRUCT(i INTEGER, j VARCHAR)
UNION 多个可选数据类型的联合,每次存储其中一种类型的值。联合还包含一个用于检查和访问当前设置成员类型的判别式“标签”值。 不同行可以设置为联合中不同的成员类型。 union_value(num := 2) UNION(num INTEGER, text VARCHAR)

大小写敏感规则

MAP 的键是大小写敏感的,而 UNIONSTRUCT 的键是不区分大小写的。示例请参见大小写敏感规则章节

更新嵌套类型的值

当对嵌套类型的值执行更新 (update) 时,DuckDB 会执行删除 (delete) 操作,随后执行插入 (insert) 操作。当在具有 ART 索引(无论是通过显式索引还是主键/唯一约束)的表中使用时,这可能导致意外的约束违规

嵌套

只要遵守类型规则,ARRAYLISTMAPSTRUCTUNION 类型可以任意深度嵌套。

包含 LIST 的 Struct

SELECT {'birds': ['duck', 'goose', 'heron'], 'aliens': NULL, 'amphibians': ['frog', 'toad']};

包含 MAP 列表的 Struct

SELECT {'test': [MAP([1, 5], [42.1, 45]), MAP([1, 5], [42.1, 45])]};

UNION 列表

SELECT [union_value(num := 2), union_value(str := 'ABC')::UNION(str VARCHAR, num INTEGER)];

性能影响

数据类型的选择会对性能产生重大影响。详情请查阅性能指南 (Performance Guide)

本节页面

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南