数据类型
此章节描述ClickHouse的数据类型。
ClickHouse不支持JSON以及Object('json')数据类型。
数据类型表
分类 | 关键字 | 数据类型 | 描述 |
|---|---|---|---|
整数类型 | Int8 | Int8 | 取值范围:【-128,127】 |
Int16 | Int16 | 取值范围:【-32768,32767】 | |
Int32 | Int32 | 取值范围:【-2147483648,2147483647】 | |
Int64 | Int64 | 取值范围:【-9223372036854775808,9223372036854775807】 | |
浮点类型 | Float32 | 单精度浮点数 | 同C语言Float类型,单精度浮点数在机内占4个字节,用32位二进制描述。 |
Float64 | 双精度浮点数 | 同C语言Double类型,双精度浮点数在机内占8个字节,用64位二进制描述。 | |
Decimal类型 | Decimal | Decimal | 有符号的定点数,可在加、减和乘法运算过程中保持精度。支持几种写法:
|
字符串类型 | String | 字符串 | 字符串可以是任意长度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他DBMSs中的VARCHAR、BLOB、CLOB等类型。 |
FixedString | 固定字符串 | 当数据的长度恰好为N个字节时,FixedString类型是高效的。 在其他情况下,这可能会降低效率。可以有效存储在FixedString类型的列中的值的示例:
| |
时间日期类型 | Date | 日期 | 用两个字节存储,表示从1970-01-01(无符号)到当前的日期值。日期中没有存储时区信息。 |
DateTime | 时间戳 | 用四个字节(无符号的)存储Unix时间戳。允许存储与日期类型相同的范围内的值。最小值为1970-01-01 00:00:00。时间戳类型值精确到秒(没有闰秒)。时区使用启动客户端或服务器时的系统时区。 | |
DateTime64 | DateTime64 | 此类型允许以日期(date)加时间(time)的形式来存储一个时刻的时间值。 | |
布尔型 | Boolean | Boolean | ClickHouse没有单独的类型来存储布尔值。可以使用UInt8类型,取值限制为0或1。 |
数组类型 | Array | Array | Array(T),由T类型元素组成的数组。T可以是任意类型,包含数组类型。但不推荐使用多维数组,ClickHouse对多维数组的支持有限。例如,不能在MergeTree表中存储多维数组。 |
元组类型 | Tuple | Tuple | Tuple(T1, T2, ...),元组,其中每个元素都有单独的类型,不能在表中存储元组(除了内存表)。它们可以用于临时列分组。在查询中,IN表达式和带特定参数的lambda函数可以来对临时列进行分组。 |
Domains数据类型 | Domains | Domains | Domains类型是特定实现的类型:
|
枚举类型 | Enum8 | Enum8 | 取值范围:【-128,127】 Enum保存'string'=integer的对应关系,例如:Enum8('hello' =1, 'world' =2) |
Enum16 | Enum16 | 取值范围:【-32768,32767】 | |
可为空 | Nullable | Nullable | 除非在ClickHouse服务器配置中另有说明,否则NULL是任何Nullable类型的默认值。Nullable类型字段不能包含在表索引中。 可以与TypeName的正常值存放一起。例如,Nullable(Int8) 类型的列可以存储Int8类型值,而没有值的行将存储NULL。 |
嵌套类型 | nested | nested | 嵌套的数据结构就像单元格内的表格。嵌套数据结构的参数(列名和类型)的指定方式与CREATE TABLE查询中的指定方式相同。每个表行都可以对应于嵌套数据结构中的任意数量的行。 示例:Nested(Name1 Type1, Name2 Type2, …) |

