跳到主要内容

数据类型

Introduced or updated: v1.2.100

Databend 的列是强类型的。本页概述可用的数据类型、转换规则以及 NULL/默认值的行为。

基础类型

数据类型别名存储 / 精度最小值最大值
BooleanBOOL1 字节
BinaryVARBINARY可变长
StringSTRING可变长
TinyIntINT81 字节-128127
SmallIntINT162 字节-3276832767
IntINT324 字节-21474836482147483647
BigIntINT648 字节-92233720368547758089223372036854775807
Float4 字节(Float32)-3.40e383.40e38
Double8 字节(Float64)-1.79e3081.79e308
Decimal16/32 字节(精度 ≤38/76)-(10^P-1)/10^S(10^P-1)/10^S

日期与时间

数据类型说明
DATE仅存储日期。
TIMESTAMP微秒级时间戳,显示受会话时区影响。
TIMESTAMP_TZ微秒级时间戳并记录偏移。
INTERVAL微秒分辨率的时间间隔,可为负值。

结构化与半结构化

数据类型示例描述
ARRAY[1, 2, 3]元素类型一致的变长集合。
TUPLE('2023-02-14','Valentine's Day')定长且可混合类型。
MAP{'a':1, 'b':2}键值对集合,内部为二元 Tuple。
VARIANT[1, {"name":"databend"}]JSON 风格的半结构化存储。
BITMAP<bitmap binary>支持集合计数与按位运算的压缩位图。

特殊领域

数据类型描述
VECTORFloat32 向量,用于相似度搜索/ML。
GEOMETRY / GEOGRAPHYWKB/EWKB 格式的空间对象。

类型转换

显式转换

  • CAST(expr AS TYPE):转换失败会抛错。
  • expr::TYPE:PostgreSQL 风格语法。
  • TRY_CAST(expr AS TYPE):失败时返回 NULL。

隐式转换

  1. 整数可自动提升到 INT64
  2. 数值可自动提升到 FLOAT64
  3. 任意类型在表达式中出现 NULL 时可提升为 Nullable<T>
  4. 所有类型都可提升为 VARIANT
  5. 复合类型按元素递归转换(例如 Array<T> -> Array<U>T -> U)。

若目标列为 NOT NULL 但数据中可能包含 NULL,请显式转换为 Nullable<T> 或使用 TRY_CAST

SELECT CONCAT('1', col);      -- 字符串拼接
SELECT CONCAT(1, col); -- 需要可用的数字转换,否则可能失败

NULL 与默认值

类型类别默认值
整数0
浮点0.0
字符串 / 二进制空字符串 / 空二进制
日期1970-01-01
时间戳1970-01-01 00:00:00
布尔FALSE

示例:

CREATE TABLE test (
id INT64,
name STRING NOT NULL,
age INT32
);

INSERT INTO test (id, name, age) VALUES (2, 'Alice', NULL);
INSERT INTO test (id, name) VALUES (1, 'John');
INSERT INTO test (id, age) VALUES (3, 45);

使用 DESC testSHOW CREATE TABLE test 可查看列的默认值与可空设置。

欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验