数据类型
数据类型
数据类型是数据表中字段支持的数据可以定义的类型。主要分为三大类:数值类型、字符类型、日期类型。
整数类型
整数类型分为 五 种,分别是:
| 数据类型 | 字节数 | 值范围(有符号) | 值范围(无符号) |
|---|---|---|---|
tinyint | 1 | (-128, 127) | (0, 255) |
smallint | 2 | (-32,768, 32,767) | (0, 65,535) |
mediumint | 3 | (-8,388,608, 8,388,607) | (0, 16,777,215) |
int / integer | 4 | (-2,147,483,648, 2,147,483,647) | (0, 4,294,967,295) |
bigint | 8 | (-9,223,372,036,854,775,808, 9,223,372,036,854,775,807) | (0, 18,446,744,073,709,551,615) |
- 如果超出了当前数据类型的范围,则会报错。
- 数据类型区分有符号和无符号,默认情况下是有符号。
- 在设置整型是,可以设置整型数据将来显示的位宽。
create table table_name(
id int,
age tinyint(2) zerofill
);
浮点类型
浮点类型有两种,分别是:
| 数据类型 | 字节数 | 值范围(有符号) | 默认小数位数 | 有效精度 |
|---|---|---|---|---|
float | 4 | (-3.402823466E+38, 3.402823466E+38) | 6 位 | 6 位 |
double | 8 | (-1.7976931348623157E+308, 1.7976931348623157E+308) | 15 位 | 10 位 |
使用时,可设置总位数及小数位数, m 表示总位数,d 表示小数位数。
// double(m, d) float(m, d)
create table table_name(
field double(20, 10) zerofill
);
定点类型
定点类型 decimal(M,D) 专门用于存储小数,M为总位数,D为小数位数,其本质是将数据分为两个部分来存储,每个部分都是整数。
create table table_name(
field decimal(5, 2)
);
字符串类型
| 数据类型 | 字节数 | 描述 |
|---|---|---|
char | 0~255 | 定长字符串,最大存储字符数:255。示例:char(10) 存储 Crysta 时会补充 \u0000 填满剩余空间 |
varchar | 0~65535 | 可变长度字符串,最大存储字符数:65535 |
tinyblob | 0~255 | 二进制字符串,最大存储字符数:255 |
blob | 0~65535 | 二进制字符串,最大存储字符数:65535 |
mediumblob | 0~1677215 | 二进制字符串,最大存储字符数:1677215 |
longblob | 0~4294967295 | 二进制字符串,最大存储字符数:4294967295 |
tinytext | 0~255 | 可变长度文本字符串,最大存储字符数:255 |
text | 0~65535 | 可变长度文本字符串,最大存储字符数:65535 |
mediumtext | 0~1677215 | 可变长度文本字符串,最大存储字符数:1677215 |
longtext | 0~4294967295 | 可变长度文本字符串,最大存储字符数:4294967295 |
char不会回收多余的字符, 而varchar会回收多余的字符,如果超出申请的范围,则报错。- 在
utf8编码下,一个中文字符占 3 个字节,因此varchar最多存储 21844 个中文字符;在gbk编码下:一个中文字符占 2 个字节,因此varchar最多存储 32766 个中文字符。 - 大文本数据类型在表中并不会实际占用所能保存的字节数,而是利用10个字节引用实际保存数据的地址。
日期类型
| 数据类型 | 格式 | 描述 |
|---|---|---|
date | 2023-08-21 | 年月日 |
time | 18:31:40 | 时分秒 |
year | 2023 | 年 |
datetime | 2023-08-21 18:31:40 | 年月日时分秒 |
timestamp | 1692527500 | 时间戳(秒) |
枚举类型
枚举是一种特殊的数据类型,用于定义一个字段可以存储的一组 预定义字符串值,非常适合用于存储有限选项的数据。
枚举值在内部以整数存储,实际存储的是预定义值的索引,其索引从 1 开始,一个枚举列最多可以定义 65535 个值。
create table table_name (
field ENUM('value1', 'value2', ..., 'valueN') DEFAULT 'value1'
);
新增数据或修改数据时,其值只能是定义的选项值,否则会报错。
布尔类型
在 MySQL 中,布尔类型 (BOOLEAN 或 BOOL) 实际上并不是真正的布尔类型,而是 tinyint(1) 的别名,其值可以为 0 (假) 或 1 (真)。
create table tasks (
field BOOLEAN default 0
);
集合类型
集合类型使用 SET 数据类型,用于定义一个字段可以存储的一组预定义的字符串值的组合,适合用于多选的场景。每个值在内部被映射为一个二进制位,最多支持 64 个选项。
create table table_name (
field SET('value1', 'value2', ..., 'valueN') DEFAULT 'value1,value2'
);