首页 > 数据库 > MySQL > 正文

MySQL数据类别DECIMAL用法

2024-07-24 12:32:44
字体:
来源:转载
供稿:网友
         当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型,可能大部分同学只是对DECIMAL类型略有了解,其中的细节还不甚清楚,本篇文章将从零开始,为你讲述DECIMAL字段类型的使用场景及方法。
 
1.DECIMAL类型简介
      DECIMAL从MySQL 5.1引入,列的声明语法是DECIMAL(M,D)。NUMERIC与DECIMAL同义,如果字段类型定义为NUMERIC,则将自动转成DECIMAL。
 
2.DECIMAL使用实战
      下面我们将创建测试表来验证DECIMAL字段类型的使用:
 
# 创建具有DECIMAL字段的表 验证decimal默认是decimal(10,0)
mysql> create table decimal_tb (col1 decimal,col2 decimal(5,2));
Query OK, 0 rows affected (0.04 sec)
 
mysql> show create table decimal_tb/G
*************************** 1. row ***************************
       Table: decimal_tb
Create Table: CREATE TABLE `decimal_tb` (
  `col1` decimal(10,0) DEFAULT NULL,
  `col2` decimal(5,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
 
# 插入数据测试
# 结论:超出存储范围会报错,小数位不足会自动补0,首位数字为0自动忽略,小数位超出会截断 并按四舍五入处理。
mysql> insert into decimal_tb (col1,col2) values (100,100);
Query OK, 1 row affected (0.05 sec)
 
mysql> insert into decimal_tb (col2) values (1.23);
Query OK, 1 row affected (0.01 sec)
 
mysql> insert into decimal_tb (col2) values (10.2);
Query OK, 1 row affected (0.01 sec)
 
mysql> insert into decimal_tb (col2) values (09.9);
Query OK, 1 row affected (0.01 sec)
 
mysql> select * from decimal_tb;
+------+--------+
| col1 | col2   |
+------+--------+
|  100 | 100.00 |
| NULL |   1.23 |
| NULL |  10.20 |
| NULL |   9.90 |
+------+--------+
4 rows in set (0.00 sec)
 
mysql> insert into decimal_tb (col2) values (9999);
ERROR 1264 (22003): Out of range value for column 'col2' at row 1
 
mysql> insert into decimal_tb (col2) values (12.233);
Query OK, 1 row affected, 1 warning (0.01 sec)
 
mysql> show warnings;
+-------+------+-------------------------------------------+
| Level | Code | Message                                   |
+-------+------+-------------------------------------------+
| Note  | 1265 | Data truncated for column 'col2' at row 1 |
+-------+------+-------------------------------------------+
1 row in set (0.00 sec)
 
mysql> insert into decimal_tb (col2) values (12.2300);
Query OK, 1 row affected (0.01 sec)
 
# 变量范围测试
# 结论:M范围是1到65,D范围是0到30,且D不大于M
mysql> alter table decimal_tb add column col3 decimal(6,6);
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
DECIMAL(M,D)中,M范围是1到65,D范围是0到30。
M默认为10,D默认为0,D不大于M。
DECIMAL(5,2)可存储范围是从-999.99到999.99,超出存储范围会报错。
存储数值时,小数位不足会自动补0,首位数字为0自动忽略。
小数位超出会截断,产生告警,并按四舍五入处理。
使用DECIMAL字段时,建议M,D参数手动指定,并按需分配。
总结:
 
本文比较简单实用,通读下来,你大概会明白DECIMAL字段的使用场景及注意事项,其实对于常见的字段类型,我们只需要了解其使用场景及注意事项即可,当我们建表时,能够快速选出合适的字段类型才是我们的目的,比如当我们需要存储小数时,能够使用DECIMAL类型并且根据业务需要选择合适的精度,这样我们的工作将很容易开展下去。

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表