Web/10-MySQL数据库/04-MySQL字段的数据类型.md
2021-07-29 11:08:52 +08:00

151 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 04-MySQL字段的数据类型
publish: true
---
<ArticleTopAd></ArticleTopAd>
## 前言
MySQL 中的字段,主要有四种数据类型:
- 整型(整数)
- 小数
- 字符串类型
- 时间日期类型
下面来详细讲一讲。
## 整数类型
### 整数类型的分类
MySQL中整型有五种
* 迷你整型tinyint使用**1个字节**存储整数最多存储256个整数-128~127
* 短整型smallint使用**2个字节**存储整数。
* 中整型mediumint使用**3个字节**存储整数。
* 标准整型int使用**4个字节**存储整数。
* 大整型bigint使用**8个字节**存储。
**强调**
1如果你不知道用哪一种或者懒得计算那就用标准整型 `int`吧,这个用的最多。
2整型在 MySQL 中默认是有符号的,即有正负;无符号需要使用 `unsigned` 修饰整型,代表正整数。
**举例**
在指定的表中新增 age 字段,要求 age 是正整数:
```sql
alter table table_qiangu1 add age int unsigned;
```
### 设计思路
如果需要新建整型的字段,设计思路如下:
1确定需要存储的数据是整数。
2预估整数的范围选择合适的整数类型。
3确定这个整数是否需要包含负数。
### 整数类型的取值范围
todo。参考链接<https://blog.csdn.net/slyjit/article/details/54290486>
### 整数类型的显示宽度、零填充
> 我们在很多设计表中,可能会看到比如 `int(11)`这种数据类型,这里面的 `11`代表的就是`显示宽度`。
所谓的**显示宽度**,其实就是显示的时候,看到的最少数字个数。
比如 int(2) 表示不管你的数值是多少最少可以看到两个数字。假如你存的数值是9没有满两位就会在前面补零显示为`09`假如你的数值是120超过了显示宽度则直接显示原始值不会做**零填充**。
**显示宽度的注意事项**
- 显示宽度只适用于 MySQL 的整数类型。
- 显示宽度只是指明 MySQL 整数类型最少显示的数字个数可以通过desc查看表字段显示
- **显示宽度只是在显示的时候改变数值的样式,不会对原本的值进行更改**。
- 显示宽度和数值类型的取值范围无关。例如int(10) 他的取值范围依然是(-2 147 483 6482 147 483 647)。
**零填充的注意事项**
- 要想让显示宽度自动进行**零填充**,必须要配合 `ZEROFILL`这个关键字一起使用。
- **零填充只能针对正整数**,也就是说,`ZEROFILL` 要求整型为无符号型。
**举例**
1、新建一张表然后在这张表中新增 num1 字段,要求 num1 显示3位不够3位的自动进行零填充
```sql
# 新建一张表
CREATE TABLE table_qiangu1 (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY
);
# 显示宽度有效(正确写法)
alter table table_qiangu1 add num1 int(3) zerofill;
# 对比:普通写法,显示宽度无效
alter table table_qiangu1 add num2 int(3);
# 对比:普通写法
alter table table_qiangu1 add num3 int;
```
上述命令中,如果把 `zerofill` 这个关键字去掉,是达不到显示宽度的效果的。执行完上述命令后,我们执行 `desc table_qiangu1` 命令,对比一下 num1、num2、num3 的字段结构就知道了:
![](https://img.smyhvae.com/20200423_1050.png)
上方截图可以看到,只有 num1 才有显示宽度它可以进行零填充num2、num3不行。我们往表中插入整数 `6`,然后看看显示结果,就一目了然:
![](https://img.smyhvae.com/20200423_1055.png)
参考链接:[MySql数据库 数值类型的显示宽度](https://juejin.im/post/5b24a2c251882574d73c6f82)
## 小数
MySQL 中的小数分为两大类:
浮点型的数据分为两种:
- 单精度float使用4个字节存储精度范围为6-7位有效数字。
- 双精度double使用8个字节存储精度范围为14-15位有效数字。
注意:
- 浮点数超过精度范围会自动进行四舍五入。
- 精度可以指定整数和小数部分。比如