clickhouse学习笔记-6-数据类型

本文详细介绍了数据库中常见的数据类型,包括整形(带符号和无符号)、浮点数、定点数以及特殊值。此外,还讨论了字符串的处理,时间与日期的格式,特别是时间戳与时区的处理方式。同时,枚举类型及其使用规则也被提及,包括其与数值和字符串的操作。文章强调了枚举类型的修改和安全性,并提供了相关示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、整形

  1. 带符号
- Int8		[-128 : 127]
- Int16		[-32768 : 32767]
- Int32
- Int64
  1. 无符号
- uInt8		[0 : 255]
- uInt16	[0 : 65535]
- uInt32
- uInt64

二、浮点数

  1. 支持类型
- Float32
- Float64
  1. 支持以下特殊的浮点数
- Inf – 正无穷
- Inf – 负无穷
- NaN – 非数字

三、定点数

  1. 数据类型
- Decimal32		- ( -1 * 10^(9 - S), 1 * 10^(9 - S) )
- Decimal64		- ( -1 * 10^(18 - S), 1 * 10^(18 - S) )
- Decimal128	- ( -1 * 10^(38 - S), 1 * 10^(38 - S) )

有符号的定点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入)

  1. 设置
decimal(P,S)
- P 精度。有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。
- S 规模。有效范围:[0:P],决定数字的小数部分中包含的小数位数。
  1. 运算和结果类型

对Decimal的二进制运算导致更宽的结果类型(无论参数的顺序如何)。

  • Decimal64(S1) Decimal32(S2) -> Decimal64(S)
  • Decimal128(S1) Decimal32(S2) -> Decimal128(S)
  • Decimal128(S1) Decimal64(S2) -> Decimal128(S)

精度变化的规则:

  • 加法,减法:S = max(S1, S2)。
  • 乘法:S = S1 + S2。
  • 除法:S = S1。

三、String

字符串可以任意长度的。它可以包含任意的字节集,包含空字节

四、时间

  1. date - (1970-01-01 至 2105)

  2. datetime - 允许存储与日期类型相同

  3. 时区

    使用启动客户端或服务器时的系统时区,时间戳是从文本(分解为组件)转换为二进制并返回。在文本格式中,有关夏令时的信息会丢失。

    默认情况下,客户端连接到服务的时候会使用服务端时区。您可以通过启用客户端命令行选项 --use_client_time_zone 来设置使用客户端时间

五、枚举

Enum 保存 'string'= integer 的对应关系

  1. 数据类型
- Enum8		'String'= Int8
- Enum16	'String'= Int16

例:
CREATE TABLE t_enum
(
    x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog

INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')

SELECT * FROM t_enum
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘

如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型。
SELECT CAST(x, 'Int8') FROM t_enum
┌─CAST(x, 'Int8')─┐
│               1 │
│               2 │
│               1 │
└─────────────────┘
  1. 规则和用法

Enum 中的字符串和数值都不能是 NULL

Enum 包含在 Nullable 类型中 x Nullable( Enum8('hello' = 1, 'world' = 2) ) 此时可以存储 NULL

枚举值不能与数字进行比较。可以与常量字符串进行比较。如果与之比较的字符串不是有效 Enum 值,则将引发异常。可以使用 IN 运算符来判断一个 Enum 是否存在于某个 Enum 集合中,其中集合中的 Enum 需要用字符串表示。

Enum 类型可以被 ALTER 无成本地修改对应集合的值。可以通过 ALTER 操作来增加或删除 Enum 的成员(只要表没有用到该值,删除都是安全的)。作为安全保障,改变之前使用过的 Enum 成员将抛出异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值