前言:

当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型,可能大部分同学只是对DECIMAL类型略有了解,其中的细节还不甚清楚,本篇文章将从零开始,为你讲述DECIMAL字段类型的使用场景及方法。

1.DECIMAL类型简介

DECIMAL从MySQL 5.1引入,列的声明语法是DECIMAL(M,D)。NUMERIC与DECIMAL同义,如果字段类型定义为NUMERIC,则将自动转成DECIMAL。

对于声明语法DECIMAL(M,D),自变量的值范围如下:

M是最大位数(精度),范围是1到65。可不指定,默认值是10。

D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。

例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中的值的范围是从-999.99到999.99。

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

mysql> alter table decimal_tb add column col4 decimal(6,7);

ERROR 1427 (42000): For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'col4').

mysql> alter table decimal_tb add column col4 decimal(65,2);

Query OK, 0 rows affected (0.11 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table decimal_tb add column col4 decimal(66,2);

ERROR 1426 (42000): Too-big precision 66 specified for 'col4'. Maximum is 65.

mysql> alter table decimal_tb add column col5 decimal(60,30);

Query OK, 0 rows affected (0.13 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table decimal_tb add column col6 decimal(60,31);

ERROR 1425 (42000): Too big scale 31 specified for column 'col6'. Maximum is 30.

3.DECIMAL使用总结

上面的内容从实战出发,介绍了DECIMAL类型的使用方法及注意事项,你可能也知道float、double这些浮点数类型,这两个同样可以存储小数,但这里不过多介绍,只是提醒大家float、double类型无法确保精度,很容易产生误差,特别是在求和计算的时候,所有当存储小数,特别是涉及金额时推荐使用DECIMAL类型。这里总结下使用DECIMAL应该注意的事项:

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类型并且根据业务需要选择合适的精度,这样我们的工作将很容易开展下去。

mysql add decimal类型_MySQL数据类型DECIMAL用法相关推荐

  1. mysql decimal 类型_MySQL数据类型DECIMAL用法详解

    MySQLDECIMAL数据类型用于在数据库中存储精确的数值.我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据. 要定义数据类型为DECIMAL的列,请使用以下语法: ...

  2. mysql decimal 类型_MySQL中decimal类型用法的简单介绍

    MySQL中支持浮点数的类型有FLOAT.DOUBLE和DECIMAL类型,DECIMAL 类型不同于FLOAT和DOUBLE,DECIMAL 实际是以串存放的.DECIMAL 可能的最大取值范围与D ...

  3. mysql 负数类型_MySQL数据类型详解

    MySQL数据类型,可以被分为3类:数值类型.日期和时间类型以及字符串(字符)类型 方括号("["和"]")指出可选的类型修饰符的部分 M 指出最大的显示尺寸. ...

  4. mysql tinyint对应java什么类型_MySQL数据类型与Java数据类型

    MySQL 中常见的数据类型:tinyint,int,bigint 整数类型 float,double,decimal 浮点类型 date,dateTime,time,timestamp 时间类型 c ...

  5. decimal类型对象里面定义什么类型_MySQL中Decimal类型和Float Double的区别(详解)

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...

  6. decimal 整数 mysql_MySQL数据类型DECIMAL用法

    MySQL DECIMAL数据类型用于在数据库中存储精确的数值.我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据. 要定义数据类型为DECIMAL的列,请使用以下语法: ...

  7. mysql decimal 实现_mysql中decimal的使用

    float,double,decimal区别 创建表test_float_double_decimal CREATE TABLE `test_float_double_decimal` ( `id` ...

  8. mysql数据库数字类型_Mysql 数据库数值类型详解

    MySQL 支持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER.SMALLINT.DECIMAL 和NUMERIC),以及近似数值数据类型(FLOAT.REAL 和DOUBLE P ...

  9. datetime对应的java类型_MySQL数据类型笔记

    引言 作为一个做Java后端的开发者,无论是在自己平时项目学习实战还是工作中的真实项目,都离不开和数据库打交道.而MySQL作为当今最流行的关系型数据库之一,也成为了我们必须掌握的一门技术.最近在工作 ...

最新文章

  1. 隔壁,阿里18k老测试员常用的 软件测试工具大全
  2. HTML5中video标签与canvas绘图的使用
  3. matlab surf 坐标,Matlab SURF指向像素坐标
  4. [BZOJ2502]清理雪道解题报告|带下界的最小流
  5. 基于命令行设置lazy-queue
  6. linux oracle新建监听,linux 下 oracle图形界面(需配置监听,创建实例)
  7. 新玩法来了,web前端教程公众号推出《每日一题》
  8. Linux Page Cache机制
  9. 【软件工程实践 · 团队项目】 第一次作业
  10. Jrebel实现tomcat热部署,遇到的问题以及解决办法,详解
  11. Eclipse中JSP生成的class文件去了哪里?
  12. iOS开发sourceTree提交和拉取代码的时候每次输入密码解决
  13. k8s(Kubernetes) 上部署 Redis 集群(3主3从)
  14. python实现水仙花数
  15. excepted one 0f #, =>at line16,column 16(byte 311)
  16. 驱动开发笔记2—PAGED_CODE(),IRQL,分页内存
  17. 利用计算机来对指纹,指纹自动识别系统.doc
  18. 瞎琢磨先生教你优雅的进行参数合法性校验
  19. 【转载】日本社会为啥没有“王思聪”
  20. 线行代数的本质-通俗易懂的讲解

热门文章

  1. 如何建立科学、客观的供应商绩效评估体系
  2. 智能型RCD、MCB动作特性及温升测试台的主要工作原理
  3. 《关系攻略》自我学习攻略
  4. Anaconda下激活环境conda activate xxx 报错
  5. HTML使用onmouseover属性更改背景颜色
  6. 武汉理工大学计算机学院专业排名,武汉理工大学最好专业排名:34个学科上榜!材料科学与工程居第一...
  7. Ubuntu22.04更新以后黑屏
  8. 程序员面试题精选100题:11-40解题报告
  9. 289、海康威视内部培训教材干货
  10. android linearlayout背景色,Android LinearLayout 点击背景颜色改变