数据类型
# 0.前言
在现实世界中, 数据的种类有很多,
比如, 人的姓名(字符), 人的年龄(整型), 人的身高(小数), 出生日期(日期)
而MySQL就是用来保存这些数据的, 所以在 MySQL中, 将数据分为三大类:
- 数值型
- 字符串
- 日期与时间
学习目的
通过学习, 大概了解怎么选择合适的数据类型
# 1.数值--整型
类型 | 名称 | 说明 | 无符号范围 | 有符号范围 |
---|---|---|---|---|
整型 | tinyint | 微整型, 占8位二进制 | 0~255 | -127~128 |
smallint | 小整型, 占16位二进制 | 0~65535(6万) | -32767~32768 | |
int | 整型 | 0~42亿 | ||
bigint | 大整型 | 0~200亿亿 |
选型
一个人的年龄: tinyint
小型blog的序号: smallint
大学一个学校的学生序号: int
大型电商网站的商品表的序号: int
马云的资产: bigint
说明
在mysql中, 默认的整型是带符号的, 如果要定义无符号整型, 需要加上unsigned
示例
CREATE TABLE `t_int` (
age tinyint unsigned,
stu_sn smallint unsigned,
goods_sn int unsigned,
mayun bigint
);
1
2
3
4
5
6
2
3
4
5
6
# 2.数值--小数
小数分为
- 浮点
- 单精度
- 双精度
- 定点
浮点型的数据不精确, 所以一般表示价格, 我们使用定点型
类型 | 名称 | 说明 |
---|---|---|
小数 | float(m,d) | m(精度), 表示总位数, d(标度), 表示小数点后的位数 |
double(m,d) | m(精度), 表示总位数, d(标度), 表示小数点后的位数 | |
decimal(m,d) | m(精度), 表示总位数, d(标度), 表示小数点后的位数 |
选型
距离: 3.4 km float(10,2)
人的体重: 80.5kg float(5,2) 最大值999.99
价格: 9.9 RMB decimal(10,2)
示例
CREATE TABLE `t_float` (
distance float(10,2),
weight float(5,2),
price decimal(10,2)
);
1
2
3
4
5
2
3
4
5
# 3.字符串
类型 | 名称 | 说明 |
---|---|---|
字符型 | char(M)定长 | 无论使用几个字符都占满全部, 范围0~255字符 |
varchar(M)变长 | 使用几个字符就占用几个, 理论范围0~65535字符 | |
text | 允许长度 0~65535 字节 | |
enum(集合) | 枚举, 集合表示选项, 以逗号隔开 |
选型
char类型: 固定长度, 一般用于存储固定长度的字符串, 如
- 手机号 char(11)
- 通过md5加密后的密码值char(32)
varchar类型: 可变长度, 存储长度不确定的字符字符串, 如
- 姓名 varchar(16)
- 邮箱 varchar(255)
text类型: 存储大段内容, 如
- 文章内容 text
enum类型: 单选, 如
- 性别
说明
char与varchar的区别
- char是固定的长度 char(5) 保存 abc, 实际占用的空间5个
- varchar最大长度 varchar(5)保存abc, 实际占用的空间3个
varchar用多少就占多少
示例
CREATE TABLE `t_char` (
phone char(11),
password char(32),
name varchar(16),
email varchar(255),
content text,
sex enum('男','女')
);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
说明
char(M)与varchar(M)中的M表示的字符数
# 4.日期与时间
类型 | 名称 | 说明 |
---|---|---|
日期 | date | 范围1000-01-01~9999-12-31 |
datetime | 范围1000-01-01 00:00:00~9999-12-31 23:59:59 | |
timestamp | 从1970年开始至今的秒数 |
选型
出生日期: date
商品抢购的开始结束时间: datetime
文章的创建更新时间: timestamp(时间戳)
说明
时间戳: 从1970年1月1日0时0分0秒到当前时间的秒数(整数)
一般时间类型更常见的是保存时间戳, 时间戳就是一个整型数, 为什么保存时间戳呢?
- 效率更高
- 方便处理
示例
CREATE TABLE `t_time` (
birthday date,
start_time datetime,
end_time datetime,
created_time timestamp
);
1
2
3
4
5
6
2
3
4
5
6
如果觉得有帮助, 可以微信扫码, 请杰哥喝杯咖啡~
上次更新: 2021/09/03, 15:32:17