clickhouse数据类型比较丰富
基本类型分为:
|
|
U开头的表示无符号类型,表示范围从0开始,后面的数字表示 位数(bit) 表示范围为 0到2^N-1
U开头: 非U开头: -2^N/2 到 (2^N)/2-1
例如 int8 表示 8位 表示范围为 -128 到 127
Uint8因为表示范围 0-255
A.枚举类型实际是整形的一个变种,通过映射map进行转换,map的key值进行排序.
B.枚举类型在排序(ORDER BY)时候特别注意,它不会按内容来排序,而是按枚举的数字key
目前有两个:
Enum8 和 Enum16
其对应的是int8 和 int16
例如:
|
|
这里特别说明一下,Enum是使用有符号的整形进行映射,因此负数也是可以的,例如:
|
|
A.N是最大字节数(Byte),不是字符长度,如果是UTF8字符串,那么就会占用3字节,GBK会占用2字节.
B.当内容少于N,数据库会自动在右填充空字节(null byte)(跟PGsql不一样,PGsql填充的是空格),当内容大于N时候,会抛出错误.
C.当写入内容后面后空字节,系统不会自动去裁剪,查询的时候也会被输出(mysql不会输出)
D.查询时候,它会把添加的空字符串一同输出
E.FixedString(N)比String 支持更少的方法
可以用来替换 VARCHAR ,BLOB,CLOB 等数据类型
PS:clickhouse没有编码的概念
,字符串存储时候就是以字节流方式存放.如果是存放文本,建议使用UTF-8,使用过程只要客户端也是使用UTF-8那么就无需转码.而一些函数,例如lengthUTF8只会在内容是UTF8时候返回才是对的.
###4 Boolean
不好意思,clickhouse没有这个数据类型,你可以用 int8来替代(个人感觉有点浪费)
DateTime实际存储时候是Unsigned 4个字节的整数Unix时间戳.
A.因为是Unsigned的整形,因此不能支持1970年1月1日(UTC/GMT的午夜)以前的时间.
B.时区会影响输入和输出.请使–use_client_time_zone 进行切换时区,服务端启动时候最好使用TZ=X来保证时区
Date两字节存储的时间戳,最多到2038年
T是一个基本类型,包括array在内.
Clickhouse不建议使用多维数组
,因为MergeTree系列引擎不能很好支持多维数组
A可以认为是一种不能变的单维数组
B不能被内存表以外的引擎存储,一般用于临时数据,特别是in查询的时候用.
例如:
|
|
2.统计函数
支持使用统计函数作为数据类型,有点像PGSQL,需要启动时候加参数开启,需要用AggregatingMergeTree引擎,也用得比较少,这里要讲就会很长了,所以->_>详情请看官方文档.