数据类型

本文将介绍Fluss所有的数据类型。

数据类型

数据类型

描述

BOOLEAN

布尔值,可能具有三值逻辑:TRUE、FALSE 或 UNKNOWN。

TINYINT

字节有符号整数,取值范围为 -128 到 127。

SMALLINT

2 字节有符号整数,取值范围为 -32,768 到 32,767。

INT

4 字节有符号整数,取值范围为 -2,147,483,648 到 2,147,483,647。

BIGINT

8 字节有符号整数,取值范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

FLOAT

4 字节单精度浮点数。

DOUBLE

8 字节双精度浮点数。

CHAR(n)

固定长度字符串,其中 n 表示字符数。n 的取值范围为 1 到 Integer.MAX_VALUE(包括两端)。

STRING

可变长度字符串。

DECIMAL(p, s)

具有固定精度和小数位数的十进制数,其中 p 表示数字总位数(精度),s 表示小数点后位数(小数位数)。p 的取值范围为 1 到 38(包括两端),s 的取值范围为 0 到 p(包括两端)。

DATE

表示日期,格式为年-月-日,取值范围为 0000-01-01 到 9999-12-31。与 SQL 标准相比,起始年份从 0000 开始。

TIME

不带时区的时间,默认不包含小数秒。格式为小时:分钟:秒,取值范围为 00:00:00 到 23:59:59。与 SQL 标准相比,不支持闰秒(如 23:59:60 和 23:59:61),语义更接近 java.time.LocalTime。

TIME(p)

不带时区的时间,其中 p 表示小数秒的位数(精度)。p 的取值范围为 0 到 9(包括两端)。格式为小时:分钟:秒[.小数秒],取值范围为 00:00:00.000000000 到 23:59:59.999999999。

TIMESTAMP

不带时区的时间戳,默认包含 6 位小数秒。格式为年-月-日 小时:分钟:秒[.小数秒],取值范围为 0000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999。与 SQL 标准相比,不支持闰秒。该类型在存储时仅保存时间的字面值,不包含任何时区信息。因此,在不同会话时区下查询时,其显示结果始终保持一致,不会因时区设置而发生变化。

TIMESTAMP(p)

不带时区的时间戳,其中 p 表示小数秒的位数(精度)。p 的取值范围为 0 到 9(包括两端)。格式为年-月-日 小时:分钟:秒[.小数秒],取值范围为 0000-01-01 00:00:00.000000000 到 9999-12-31 23:59:59.999999999。该类型在存储时仅保存时间的字面值,不包含任何时区信息。因此,在不同会话时区下查询时,其显示结果始终保持一致,不会因时区设置而发生变化。

TIMESTAMP_LTZ

带本地时区的时间戳,默认包含 6 位小数秒。格式为年-月-日 小时:分钟:秒[.小数秒] 时区,取值范围为 0000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999。与 SQL 标准相比,不支持闰秒。该类型在存储时以自 1970-01-01 00:00:00 UTC 起的微秒数(UTC 时间戳)保存,不记录原始时区 ID,仅保留绝对时间点。在显示或解析时,系统会根据当前会话的时区将其转换为对应的本地时间进行展示。因此,在不同时区的会话中查询时,其显示结果可能因时区不同而不一样。

TIMESTAMP_LTZ(p)

带时区的时间戳,其中 p 表示小数秒的位数(精度)。p 的取值范围为 0 到 9(包括两端)。格式为年-月-日 小时:分钟:秒[.小数秒],取值范围为 0000-01-01 00:00:00.000000000 到 9999-12-31 23:59:59.999999999。该类型在存储时以自 1970-01-01 00:00:00 UTC 起的毫秒/微秒/纳秒数(UTC 时间戳)保存,不记录原始时区 ID,仅保留绝对时间点。在显示或解析时,系统会根据当前会话的时区将其转换为对应的本地时间进行展示。因此,在不同时区的会话中查询时,其显示结果可能因时区不同而不一样。

BYTES

可变长度二进制字符串(即字节序列)。