数据类型
存储类型选择:
整数、浮点数或定点数:数据将来可能参与数学计算;
字符串:只用来显示。
例如:商品库存可能需要增加、减少、求和等,所以保存为整型;
用户的身份证、电话号码一般不需要计算,可以保存为字符串型。
存储类型选择:
表的主键推荐使用整数类型。
与字符串相比,整数类型的处理效率更高,查询速度更快。
当插入的值的数据类型与字段的数据类型不一致,
或使用 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 修饰。
谢谢!
版权声明: 本文为 InfoQ 作者【在即】的原创文章。
原文链接:【http://xie.infoq.cn/article/f7387d70bc5275cbac124e52a】。文章转载请联系作者。
评论