数据类型于约束
数字类型
观察 DECIMAL 超出精度时的保存结果
① 创建表,选取 DECIMAL 类型进行测试
mysql> CREATE TABLE my_decimal (d1 DECIMAL(4,2), d2 DECIMAL(4,2));
Query OK, 0 rows affected (0.01 sec)
② 插入的小数部分超出范围时,会四舍五入并出现警告
mysql> INSERT INTO my_decimal VALUES(1.234, 1.235);
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+-----------------------------------------+
| Level | Code | Message |
+-------+------+-----------------------------------------+
| Note | 1265 | Data truncated for column 'd1' at row 1 |
| Note | 1265 | Data truncated for column 'd2' at row 1 |
+-------+------+-----------------------------------------+
2 rows in set (0.00 sec)
若小数部分超出范围,会进行四舍五入,
并出现 Data truncated(数据截断)警告。
③ 插入的小数部分四舍五入导致整数部分进位时,插入失败
mysql> INSERT INTO my_decimal VALUES(99.99, 99.999);
ERROR 1264 (22003): Out of range value for column 'd2' at row 1
若整数部分超出范围,数据会插入失败,
提示 Out of range value(超出取值范围)
④ 查询结果
mysql> SELECT * FROM my_decimal;
+------+------+
| d1 | d2 |
+------+------+
| 1.23 | 1.24 |
+------+------+
1 row in set (0.00 sec)
浮点数类型也可以设置位数和精度,
但仍有可能损失精度。
示例:float(8,2)
在实际使用时应避免使用浮点数类型,
以免出现不能人为控制的问题。
推荐:使用定点数类型并设置合理的范围可以使计算更为准确。
BIT(位)类型用于存储二进制数据,语法如下。
BIT(M)
M 表示位数,范围为 1~64。
7 位
字符 A →ASCII 65 1000001
(十进制)(二进制)
BIT(M) M=7
谢谢!
版权声明: 本文为 InfoQ 作者【在即】的原创文章。
原文链接:【http://xie.infoq.cn/article/c4fe458d65d90921e1a7213b4】。文章转载请联系作者。
评论