整型
固定长度的整型,包括有符号整型或无符号整型。
1.1 有符号整型范围(-2^n-1~2^n-1 -1)
Int8 - [-128 : 127] # 8位,对应Java中的byte
Int16 - [-32768 : 32767] # 16位,对应Java中的short
Int32 - [-2147483648 : 2147483647]
Int64 - [-9223372036854775808 : 9223372036854775807]
应用场景:
适用于需要整数存储的场景,如用户ID、年龄、计数等。
1.2 无符号整型范围(0~2^n-1)
UInt8 - [0 : 255]
UInt16 - [0 : 65535]
UInt32 - [0 : 4294967295]
UInt64 - [0 : 18446744073709551615]
应用场景:
适用于不需要负数表示的场景,如文件大小、网络端口号等,这些类型更为合适。
浮点型
2.1 Float32
32位浮点型。
2.2 Float64
64位浮点型。
举例:
控制台执行sql语句select 1-0.9:

应用场景:
浮点型数据类型适用于数据值较小、不涉及大量统计计算且精度要求不高的场景,例如科学计算。
字符型
3.1 String
可变长度字符串类型。
应用场景:
适用于存储长度可变的文本数据,如用户名称、描述信息等。
3.2 FixedString(N)
固定长度字符串类型,N为字符串长度。
应用场景:
适用于字符串最大长度且长度固定不变的场景,使用FixedString可以提高存储效率和查询性能,如固定格式的日志消息等。
Decimal型
4.1 Decimal32(s)
相当于 Decimal(9-s,s),有效位数为 1~9。
4.2 Decimal64(s)
相当于 Decimal(18-s,s),有效位数为 1~18。
4.3 Decimal128(s)
相当于 Decimal(38-s,s),有效位数为 1~38。
举例:
Decimal32(5),即整数+小数一共9位,小数部分5位。
应用场景:
一般金额字段、汇率、利率等字段为了保证小数点精度,都使用 Decimal进行存储。
枚举类型
5.1 Enum8
枚举值类型为Int8。
5.2 Enum16
枚举值类型为Int16。
举例:
创建一个表,其中x列是枚举类型:

这个枚举类型保存了两个String和和Int的对应关系。这个 x 列只能存储类型定义中列出的值:‘success或’fail’。
插入数据:
INSERT INTO t_enum VALUES ('fail'), ('success'), (1);
表数据:

插入其他数据:
INSERT INTO t_enum VALUES ('a');
报错:

需要看到完整的枚举数据,执行命令:
SELECT toTypeName(x) FROM t_enum;

应用场景:
枚举类型适用于表示有限的状态或类型,如订单状态(成功、失败)、用户类型等,既节省了空间又增强了数据约束。
时间类型
6.1 Date
接受年-月-日的字符串比如 ‘2019-12-16’。
6.2 Datetime
接受年-月-日 时:分:秒的字符串比如 ‘2019-12-16 20:50:10’。
6.3 Datetime64
接受年-月-日 时:分:秒.亚秒的字符串比如‘2019-12-16 20:50:10.66’。
应用场景:
时间类型在处理时间序列数据、日志分析和用户行为追踪等方面至关重要。
数组
Array(T):由 T 类型元素组成的数组。
7.1 创建数组的方式1:使用array函数
# toTypeName(x) 函数,获取当前字段的类型;
# array(1, 2) AS x即1、2两个数字放这个数组里,起名x。
SELECT array(1, 2) AS x, toTypeName(x) ;

7.2 创建数组的方式2:使用方括号
SELECT [1, 2] AS x, toTypeName(x);

应用场景:
数组类型在处理列表数据、批量操作和复杂查询。

本文作者:刘怡畅(上海新炬中北团队)
本文来源:“IT那活儿”公众号
