数据类型
TiDB Cloud Lake 将数据存储在强类型列中。本页概述支持的数据类型、自动/显式转换的工作方式,以及 NULL 或默认值的处理行为。
基础类型
日期和时间类型
结构化与半结构化类型
领域特定类型
类型转换与转换规则
显式类型转换
CAST(expr AS TYPE)使用 ANSI 语法,在转换无效时会失败。expr::TYPE是 PostgreSQL 风格的简写。TRY_CAST(expr AS TYPE)在转换失败时返回 NULL,而不是抛出错误。
隐式类型转换(Coercion)
TiDB Cloud Lake 会在定义明确的场景下执行自动转换:
- 整数型会向上提升为
INT64。例如:UInt8 -> INT64。 - 数值类型在必要时会向上提升为
FLOAT64。 - 如果表达式中出现 NULL,任意类型
T都可以变为Nullable(T)。 - 所有类型都可以向上提升为
VARIANT。 - 复杂类型按元素进行强制转换(当
T -> U时,Array<T> -> Array<U>;元组和映射同理)。
当目标列为 NOT NULL 时,如果数据中可能包含 NULL,请显式转换为 Nullable<T> 或使用 TRY_CAST。
SELECT CONCAT('1', col); -- safe (strings)
SELECT CONCAT(1, col); -- may fail if `col` can't coerce to number
NULL 处理与默认值
除非声明为 NOT NULL,否则列允许 NULL 值。当在 INSERT 时省略 NOT NULL 列,TiDB Cloud Lake 会写入该类型对应的默认值:
示例:
CREATE TABLE test (
id INT64,
name STRING NOT NULL,
age INT32
);
INSERT INTO test (id, name, age) VALUES (2, 'Alice', NULL); -- allowed
INSERT INTO test (id, name) VALUES (1, 'John'); -- age becomes NULL
INSERT INTO test (id, age) VALUES (3, 45); -- name uses default ''
你可以随时使用 DESC test 或 SHOW CREATE TABLE test 查看列的默认值和可空性。