🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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