Webcourse/10-Node.js和数据库/MySQL数据库/04-MySQL字段的数据类型.md
2020-05-14 21:41:53 +08:00

142 lines
4.0 KiB
JavaScript
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.

## 前言
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` 命令对比一下 num1num2num3 的字段结构就知道了
![](../../img/20200423_1050.png)
上方截图可以看到只有 num1 才有显示宽度它可以进行零填充num2num3不行我们往表中插入整数 `6`然后看看显示结果就一目了然
![](../../img/20200423_1055.png)
参考链接[MySql数据库 数值类型的显示宽度](https://juejin.im/post/5b24a2c251882574d73c6f82)
## 小数
MySQL 中的小数分为两大类
浮点型的数据分为两种
- 单精度float使用4个字节存储精度范围为6-7位有效数字
- 双精度double使用8个字节存储精度范围为14-15位有效数字
注意
- 浮点数超过精度范围会自动进行四舍五入
- 精度可以指定整数和小数部分比如