# ClickHouse数据类型
[TOC]
**在CK中关键字严格区分大小写**
## 数值类型
ClickHouse则直接使用Int8、Int16、Int32和Int64指代4种大小的Int类型,其末尾的数字正好表明了占用字节的大小
![](https://img.kancloud.cn/fe/0b/fe0bb57102de9b42b8fbad83c386e70b_649x129.png)
**ClickHouse支持无符号的整数,使用前缀U表示**
![](https://img.kancloud.cn/7f/57/7f5708fa1d2de671e6d1258499734b59_649x128.png)
## 浮点型FloatX
和mysql一样,会有精度问题
![](https://img.kancloud.cn/81/18/8118ad68a5378d985aea7fba65e91f93_650x86.png)
## Decimal
要求更高精度的数值运算,ClickHouse提 供了Decimal32、Decimal64和Decimal128三种精度的定点数。可以通过 两种形式声明定点:简写方式有Decimal32(S)、Decimal64(S)、Decimal128(S)三种,原生方式为Decimal(P,S),其中:
·P代表精度,代表总位数(整数部分+小数部分),取值范围是1 ~38;·S代表规模,代表小数位数,取值范围是0~P
![](https://img.kancloud.cn/1d/15/1d1581b39f76c5d6e138acb9e410e8a4_649x113.png)
在使用两个不同精度的定点数进行四则运算的时候,它们的小数点 位数S会发生变化。
在进行加法运算时,S取最大值。例如下面的查询,toDecimal64(2,4)与toDecimal32(2,2)相加后S=4:
在进行减法运算时,S取最大值。例如下面的查询,toDecimal64(2,4)与toDecimal32(2,2)相减后S=4:
在进行乘法运算时,S取和。例如下面的查询,toDecimal64(2,4)与toDecimal32(2,2)相乘后S=4+2:
在进行除法运算时,S取最大值。例如下面的查询,toDecimal64(2,4)与toDecimal32(2,2)相除后S=4:但是要保证被除数的S大于除数的S,否则报错
## 字符串类型
符串类型可以细分为String、FixedString和UUID三类
1) String
字符串由String定义,长度不限
2) FixedString
固定长度的字符串,FixedString使用null字节填充末尾字符,而mysql中Char通常使用空格填充。
3) UUID
UUID是一种数据库常见的主键类型,在ClickHouse中直接把它作为一种数据类型。UUID共有32位,它的格式为8-4-4-4-12。如果一个UUID类型的字段在写入数据时没有被赋值,则会依照格式使用0填充。
00000000-0000-0000-0000-000000000000
## 时间类型
1) Date
Date类型不包括具体时间信息,精确到天,支持字符串形式写入
2)Datetime精确到秒,支持字符串形式写入
3)DateTime64
可精确到亚秒
2021-08-17 10:30:51.000
## 复杂类型
1)Enum
ClickHouse支持枚举类型,ClickHouse提供了Enum8和Enum16两种枚举类型,Enum8和Enum16分别会对应(String:Int8)和(String:Int16)
```
create table test_enum(id Int8 , color Enum('red'=1 , 'green'=2 , 'blue'=3)) engine=Memory ;
insert into test_enum values(1,'red'),(1,'red'),(2,'green');
-- 也可以使用这种方式进行插入数据:
insert into test_enum values(3,3) ;
```
2)Array(T)
ClickHouse支持数组复合数据类型,数组中的的数据类型要求一致
```
insert into test_array values(1,['eat','drink','la']),(2,array('sleep','palyg','sql'));
```
3)Tuple
元组类型,元组类型中可以存储多种数据类型
4)Nested
嵌套表结构,可以定义任意多个嵌套类型字段
```
create table test_nested(
uid Int8 ,
name String ,
props Nested(
pid Int8,
pnames String ,
pvalues String
)
)engine = Memory ;
```
## Map
~~~
SELECT map('key1', number, 'key2', number * 2) FROM numbers(3);
~~~
Result:
~~~
┌─map('key1', number, 'key2', multiply(number, 2))─┐
│ {'key1':0,'key2':0} │
│ {'key1':1,'key2':2} │
│ {'key1':2,'key2':4} │
└──────────────────────────────────────────────────┘
~~~
## GEO
## Boolean和Nullable
ck中没有Boolean类型 ,使用1和0来代表true和false
Nullable 某种数据类型允许为null , 或者是没有给值的情况下默认是NULL
- ClickHouse
- 第一节 ClickHouse入门
- 1.1ClickHouse概述
- 1.2ClickHouse单机安装
- 1.3ClickHouse配置
- 1.4ClickHouse数据库引擎
- 1.5ClickHouse集群部署
- 第二节 ClickHouse进阶
- 2.1ClicKHouse数据类型
- 2.2ClicKHouse基本语法
- 2.3ClickHouse引擎
- 2.4ClickHouse函数
- 2.5ClickHouse分布式表
- 2.6ClickHouse权限和密码加密
- 2.7ClickHouse数据导入和导出
- 第三节 ClicKHouse实战篇
- 3.1ClickHouse的JDBC连接
- 3.2ClickHouse用户行为分析
- 3.3ClickHouse实战
- 第四节 ClicKHouse常见问题
- 4.1ClickHouse常见问题汇总
- 第五节 ClickHouse其他
- 5.1ClickHouse可视化工具
- 5.2ClickHouse学习教程