写点什么

数据类型

用户头像
在即
关注
发布于: 2021 年 03 月 09 日
数据类型

存储类型选择

整数浮点数定点数:数据将来可能参与数学计算

字符串:只用来显示

例如:商品库存可能需要增加、减少、求和等,所以保存为整型;

用户的身份证、电话号码一般不需要计算,可以保存为字符串型。

存储类型选择

表的主键推荐使用整数类型

与字符串相比,整数类型的处理效率更高,查询速度更快。

插入的值的数据类型字段的数据类型不一致,

或使用 ALTER TABLE 修改字段的数据类型时,

MySQL 会尝试尽可能将现有的值转换为新类型。


示例

字符串'123'、'-123'、'1.23'与数字 123、-123、1.23 可以互相转换;

1.5 转换为整数时,会被四舍五入,结果为 2。

无符号数据类型:使用 UNSIGNED 关键字修饰。

修饰为无符号后,取值范围将不包含负数

浮点数类型精度不高

FLOAT 的精度大约 6~7 位,

DOUBLE 的精度大约 15 位左右。

如果超出精度,可能会导致:

给定的数值与实际保存的数值不一致,发生精度损失


观察 FLOAT 超出精度时的保存结果

① 创建表,选取 FLOAT 类型进行测试

mysql> CREATE TABLE my_float (f1 FLOAT, f2 FLOAT);

Query OK, 0 rows affected (0.01 sec)

② 插入未超出精度的数字

mysql> INSERT INTO my_float VALUES(111111, 1.11111);

Query OK, 1 row affected (0.00 sec)

③ 插入超出精度的数字

mysql> INSERT INTO my_float VALUES(1111111, 1.111111);

Query OK, 1 row affected (0.00 sec)


④ 插入 7 位数,第 7 位四舍五入

mysql> INSERT INTO my_float VALUES(1111114, 1111115);

Query OK, 1 row affected (0.00 sec)

⑤ 插入 8 位数,第 7 位四舍五入,第 8 位忽略

mysql> INSERT INTO my_float VALUES(11111149, 11111159);

Query OK, 1 row affected (0.00 sec)


⑥ 查询结果

mysql> SELECT * FROM my_float;

+----------+----------+

| f1 | f2 |

+----------+----------+

| 111111 | 1.11111 |

| 1111110 | 1.11111 |

| 1111110 | 1111120 |

| 11111100 | 11111200 |

+----------+----------+

4 rows in set (0.00 sec)

整数部分和小数部分加起来达到 7 位时,

第 7 位就会四舍五入。


定点数类型(DECIMAL):通过 DECIMAL(M,D)设置位数和精度。

M 表示数字总位数(不包括“.”和“-”)最大为 65,默认为 10;

D 表示小数点后的位数,最大值为 30,默认值为 0。


示例:DECIMAL(5,2)表示的取值范围是-999.99~999.99。

系统会自动根据存储的数据来分配存储空间。

若不允许保存负数,可通过 UNSIGNED 修饰。


谢谢!


发布于: 2021 年 03 月 09 日阅读数: 8
用户头像

在即

关注

还未添加个人签名 2021.02.27 加入

还未添加个人简介

评论

发布
暂无评论
数据类型