数据类型

为表字段选择合理的数据类型,不仅能够提升数据库的性能和存储效率,还能有助于维护数据库数据的完整性和可读性,并增强数据库的安全性和一致性。本文为您介绍云数据库 SelectDB 版所支持的数据类型。

数值类型

类型名称

字节数

描述

BOOLEAN

1

布尔值。

0:false

1:true

TINYINT

1

有符号整数。

值范围:[-128, 127]

SMALLINT

2

有符号整数。

值范围:[-32768, 32767]

INT

4

有符号整数。

值范围:[-2147483648, 2147483647]

BIGINT

8

有符号整数。

值范围:[-9223372036854775808, 9223372036854775807]

LARGEINT

16

有符号整数。

值范围:[-2^127 + 1 ~ 2^127 - 1]

FLOAT

4

浮点数。

值范围:[-3.4*10^38 ~ 3.4*10^38]

DOUBLE

8

浮点数。

值范围:[-1.79*10^308 ~ 1.79*10^308]

DECIMAL

4/8/16

高精度定点数。

定义格式:DECIMAL(M[,D])

  • M:

    • 表示一共有多少个有效数字(precision)。

    • 值范围:[1, 38]

  • D:

    • 代表小数位有多少数字(scale)。

    • 值范围:[0, precision]

      • 0 <= precision <= 9时,占用4字节。

      • 9 < precision <= 18时,占用8字节。

      • 16 < precision <= 38时,占用16字节。

日期类型

类型名称

字节数

描述

DATE

16

日期类型。

取值范围:['0000-01-01', '9999-12-31']

默认输出格式:yyyy-MM-dd

DATETIME

16

日期时间类型。

定义格式:DATETIME([P])

说明

P:

  • 表示时间精度。

  • 默认值:0

  • 取值范围:[0, 6],即最多支持6位小数(微秒)。

取值范围:['0000-01-01 00:00:00[.000000]', '9999-12-31 23:59:59[.999999]']

默认输出格式:yyyy-MM-dd HH:mm:ss.SSSSSS

字符串类型

类型名称

字节数

描述

CHAR

M

定长字符串。

定义格式:CHAR(M)

说明

M代表的是定长字符串的字节长度。

占用空间大小:1~255个字节。

VARCHAR

不定长

变长字符串。

定义格式:VARCHAR(M)

说明
  • M代表的是变长字符串的字节长度。

  • 变长字符串是以UTF-8编码存储的,因此通常英文字符占1个字节,中文字符占3个字节。

占用空间大小:1~65533个字节。

STRING

不定长

变长字符串。

默认占用的最小空间:1048576字节(1 MB)

最大占用的空间大小:2147483643字节(2 GB)

重要
  • 通过BE配置string_type_length_soft_limit_bytes调整STRING支持的空间大小。

  • STRING类型仅支持定义Value列,不能定义Key列和分区分桶列。

聚合类型

类型名称

字节数

描述

HLL

不定长

HLL是模糊去重,在数据量大的情况性能优于Count Distinct。

使用注意事项:

  • 存在误差:通常在1%左右,有时会达到2%。

  • 建表时不能定义Key列,且聚合类型必须为HLL_UNION。

  • 不需要指定长度和默认值。其长度根据数据的聚合程度系统内控制。

  • 查询或使用必须通过hll_union_agghll_raw_agghll_cardinalityhll_hash函数才会生效。

BITMAP

不定长

用于精确去重,如 UV 统计,人群圈选等场景。

使用注意事项:

  • BITMAP类型可以定义Aggregate表和Unique表中的列,且必须为Key列。但是在Aggregate表中使用时,还需配合聚合类型BITMAP_UNION使用。

  • 无需指定长度和默认值。长度根据数据的聚合程度系统内控制。

  • BITMAP列只能通过配套的bitmap_union_count、bitmap_union、bitmap_hash、bitmap_hash64等函数进行查询或使用。

QUANTILE_STATE

不定长

用于分位数近似计算。

在导入数据时会对相同的Key列,不同Value进行预聚合。

  • Value数量 <= 2048:采用明细记录所有数据。

  • Value数量 >= 2048:采用TDigest算法,对数据进行聚合(聚类)保存聚类后的质心点。

使用注意事项:

  • 建表时不能定义key列,且表的聚合类型必须为QUANTILE_UNION。

  • 无需指定长度和默认值,其长度根据数据的聚合程度系统内控制。

  • 仅支持通过配套的QUANTILE_PERCENTQUANTILE_UNIONTO_QUANTILE_STATE等函数进行查询或使用。

AGG_STATE

不定长

聚合函数。

用于聚合计算加速,且只能配合state/merge/union函数组合器使用。

使用注意事项:

  • AGG_STATE不能作为Key列使用,建表时需要同时声明聚合函数的签名。

  • 用户不需要指定长度和默认值。实际存储的数据大小与函数实现有关。

半结构类型

类型名称

字节数

描述

ARRAY

不定长

定义格式:ARRAY<T>

说明
  • T为基础数据类型。

  • T支持的类型:

    BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL, DATE,
    DATEV2, DATETIME, DATETIMEV2, CHAR, VARCHAR, STRING

使用注意事项:

  • 不支持定义Key列。

  • 仅支持在Duplicate和Unique模型的表中使用。

MAP

不定长

由<K,V>类型元素组成的Map。

定义格式:MAP<K,V>

使用注意事项:

  • 不支持定义Key列。

  • 仅支持在Duplicate和Unique模型的表中使用。

JSON

不定长

采用二进制JSON格式存储,通过JSON函数访问JSON内部字段。

默认支持的空间大小:1048576字节(1MB)

最大支持的空间大小:2147483643字节(2GB)

说明

可通过BE配置jsonb_type_length_soft_limit_bytes调整其空间大小。