ClickHouse数据类型分:基础类型、复合类型和特殊类型
一、 基础类型
分数字、字符串和时间
1、 数字
分整数、浮点数和定点数
名称 |
大小(字节) |
范围 |
Int8 |
1 |
-128 ~ 127 |
Int16 |
2 |
-32768 ~ 32767 |
Int32 |
4 |
-2147483648 ~ 2147483647 |
Int64 |
8 |
-9223372036854775808 ~ 9223372036854775807 |
UInt8 |
1 |
0 ~ 255 |
UInt16 |
2 |
0 ~ 65535 |
UInt32 |
4 |
0 ~ 4294967295 |
UInt64 |
8 |
0 ~ 18446744073709551615 |
名称 |
大小(字节) |
有效精度 |
Float32 |
4 |
7 |
Float64 |
8 |
16 |
名称 |
等效声明 |
范围 |
Decimal32(S) |
Decimal(1~9,S) |
-110^(9-S) ~ 110^(9-S) |
Decimal64(S) |
Decimal(10~18,S) |
-110^(18-S) ~ 110^(18-S) |
Decimal128(S) |
Decimal(19~38,S) |
-110^(38-S) ~ 110^(38-S) |
四则运算后的精度变化规则
四则运算 |
规则 |
示例 |
加法 |
S = max(S1,S2) |
SELECT toDecimal64(6,8) + toDecimal64(3,2) |
减法 |
S = max(S1,S2) |
SELECT toDecimal64(6,8) - toDecimal64(3,2) |
乘法 |
S = S1 + S2 |
SELECT toDecimal64(6,8) * toDecimal64(3,2) |
除法 |
S = S1 / S2 |
SELECT toDecimal64(6,8) / toDecimal64(3,2) |
2、 字符串:String、FixedString和UUID
String:长度不限,可以不指定长度
FixedString:固定长度字符串,末尾用空字符填充,故长度=固定字符串长度+2
UUID:32位,格式:8-4-4-4-12。赋值时如果没指定,用0代替。
3、 时间:DateTime、DateTime64和Date
DateTime:日期+时分秒,例如:2021-04-28 21:09:06
DateTime64:日期+时分亚秒,例如:2021-04-28 21:09:06.12
Date:日期,例如:2021-04-28
二、 复合类型
分数组、元组、枚举和嵌套
类型 |
描述 |
示例 |
数组(Array) |
用array(1,2,3)或者[1,2,3]方式定义,各类型之间必须兼容 |
c Array(String) |
元组(Tuple) |
由1到n个元素组成,每个元素之间的数据类型可以不一样。用tuple(T)或(T)方式定义。 |
c Tuple(String,Int8) |
枚举(Enum) |
定义常量,两种类型Enum8和Enum16,使用键值方式定义数据。 |
c Enum8(‘ready’=1,’start’=2,’success’=3,’error’=4) |
嵌套(Nested) |
可以定义任意多个字段,只支持一级嵌套,即嵌套内不能在使用嵌套。嵌套的本质是一种多维数组。在访问时使用点符号 |
c Nested( id Int8,name String(255)) |
三、 特殊类型
1、 Nullable:和基础类型搭配使用,不能使用数组和元组,不能作为索引字段
2、 Domain:分为IPv4和IPv6