MySQL最佳入门 - MySQL数据类型之存储带小数的类型

本篇文章MySQL版本:

+-----------+
| version() |
+-----------+
| 5.5.53    |
+-----------+

存储带小数的类型

  • 浮点数和定点数类型来存储带小数的数值;
  • 使用(M,D)的方式设定M的精度(或显示的总位数)和D标度(小数的位数)。

FLOAT

正常格式

创建一个长度为3,小数点之后长度为2的单精度浮点型字段:

mysql> create table t8 (
    -> col1 float(3,2)
    -> );
Query OK, 0 rows affected (0.01 sec)

插入一条正常数据:

mysql> insert into t8 values (3.33);
Query OK, 1 row affected (0.00 sec)

插入一条小数点后面只有一位的数据:

mysql> insert into t8 values (3.3);
Query OK, 1 row affected (0.00 sec)

插入一条小数点后面大于指定的长度的数据:

mysql> insert into t8 values (3.333);
Query OK, 1 row affected (0.00 sec)

插入一条小数点后面大于指定长度的数据(四舍五入):

mysql> insert into t8 values (3.336);
Query OK, 1 row affected (0.00 sec)

查询:

mysql> select * from t8;
+------+
| col1 |
+------+
| 3.33 |
| 3.30 |
| 3.33 |
| 3.34 |
+------+
4 rows in set (0.00 sec)

错误用法

插入一条整数长度为2,小数长度为1的数据:

mysql> insert into t8 values(33.3);
Query OK, 1 row affected, 1 warning (0.00 sec)

总长度为3,小数点后面为1,都没有超过规则。但是执行完,返回 一个警告。

看一下结果:

mysql> select * from t8;
+------+
| col1 |
+------+
| 3.33 |
| 3.30 |
| 3.33 |
| 3.34 |
| 9.99 |
+------+
5 rows in set (0.00 sec)

不同版本返回结果不同

  • 5.6会提示报错,提示 超出长度范围,是违法数据,原因也就是说默认设置长度为3,小数长度为2,所以插入33.3就等于插入了33.30,超出总长度报错;
  • 5.5版本可以正常插入,但是只能插入最大值,也就是 整型1位,小数2位。

DOUBLE

double和float用法大同小异,只是范围广一点,不再做多余陈述;

DECIMAL

mysql> help DECIMAL;
Name: 'DECIMAL'
Description:
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
  • The maximum number of digits (M) for DECIMAL is 65.
  • The maximum number of supported decimals (D) is 30.
  • If D is omitted,the default is 0.
  • If M is omitted, the default is 10.
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值