一、整形
- 带符号
- Int8 [-128 : 127]
- Int16 [-32768 : 32767]
- Int32
- Int64
- 无符号
- uInt8 [0 : 255]
- uInt16 [0 : 65535]
- uInt32
- uInt64
二、浮点数
- 支持类型
- Float32
- Float64
- 支持以下特殊的浮点数
- Inf – 正无穷
- Inf – 负无穷
- NaN – 非数字
三、定点数
- 数据类型
- 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) )
有符号的定点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入)
- 设置
decimal(P,S)
- P 精度。有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。
- S 规模。有效范围:[0:P],决定数字的小数部分中包含的小数位数。
- 运算和结果类型
对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
字符串可以任意长度的。它可以包含任意的字节集,包含空字节
四、时间
-
date - (1970-01-01 至 2105)
-
datetime - 允许存储与日期类型相同
-
时区
使用启动客户端或服务器时的系统时区,时间戳是从文本(分解为组件)转换为二进制并返回。在文本格式中,有关夏令时的信息会丢失。
默认情况下,客户端连接到服务的时候会使用服务端时区。您可以通过启用客户端命令行选项
--use_client_time_zone
来设置使用客户端时间
五、枚举
Enum
保存 'string'= integer
的对应关系
- 数据类型
- 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 │
└─────────────────┘
- 规则和用法
Enum
中的字符串和数值都不能是 NULL
Enum
包含在 Nullable 类型中 x Nullable( Enum8('hello' = 1, 'world' = 2) )
此时可以存储 NULL
枚举值不能与数字进行比较。可以与常量字符串进行比较。如果与之比较的字符串不是有效 Enum 值,则将引发异常。可以使用 IN 运算符来判断一个 Enum 是否存在于某个 Enum 集合中,其中集合中的 Enum 需要用字符串表示。
Enum 类型可以被 ALTER
无成本地修改对应集合的值。可以通过 ALTER
操作来增加或删除 Enum 的成员(只要表没有用到该值,删除都是安全的)。作为安全保障,改变之前使用过的 Enum 成员将抛出异常。