[转帖]MySQL定点数类型DECIMAL用法详解
https://www.cnblogs.com/danielzzz/p/16824214.html
一、MySQL DECIMAL 的使用
DECIMAL 数据类型用于在数据库中存储精确的数值,我们经常将该数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
要定义数据类型为DECIMAL的列,请使用以下语法:
column_name DECIMAL(P,D);
在上面的语法中:
P
是表示有效数字数的精度。P
范围为1〜65
。D
是表示小数点后的位数。D
的范围是0
~30
。MySQL要求D
小于或等于(<=
)P
。DECIMAL(P,D)
表示列可以存储D
位小数的P
位数。十进制列的实际范围取决于精度和刻度。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
与INT数据类型一样,DECIMAL
类型也具有UNSIGNED
和ZEROFILL
属性。 如果使用UNSIGNED
属性,则DECIMAL UNSIGNED
的列将不接受负值。【取值范围只有正数部分,而不是像整数类型一样取值范围翻倍】
如果使用ZEROFILL
,MySQL将把显示值填充到0
以显示由列定义指定的宽度。 另外,如果我们对DECIMAL
列使用ZEROFILL
,MySQL将自动将UNSIGNED
属性添加到列。
以下示例使用DECIMAL
数据类型定义的一个叫作amount
的列。
amount DECIMAL(6,2);
在此示例中,amount
列最多可以存储6
位数字,小数位数为2
位; 因此,amount
列的范围是从-9999.99
到9999.99
。
MySQL允许使用以下语法:
column_name DECIMAL(P);
这相当于:在这种情况下,列不包含小数部分或小数点。此外,我们甚至可以使用以下语法。
column_name DECIMAL;
在这种情况下,P
的默认值为10
。
二、DECIMAL 的存储方式以及占用空间
DECIMAL的存储方式和其他数据类型都不同,它是以字符串形式存储的。假设一个字段为DECIMAL(3,0),当我们存入100时,实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值,由于一个数字字符占用1个字节,所以共占用三个字节的空间。然后还要存入描述该数据的元数据,元数据固定占用2个字节,所以共占用5个字节。
总结:DECIMAL(M,N)会占用(M+2)个字节。
三、DECIMAL数据类型示例
首先,创建一个名为test_order
的新表,其中包含三列:id
,description
和cost
。
CREATE TABLE test_order (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(255),
cost DECIMAL(19,4) NOT NULL
);
第二步,将资料插入test_order表。
INSERT INTO test_order(description,cost)
VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);
第三步,从test_order表查询数据。
SELECT * from test_order
查询结果:
第四步,更改cost
列以包含ZEROFILL
属性。
ALTER TABLE test_order
MODIFY cost DECIMAL(19,4) zerofill;
第五步,再次查询test_order表。
查询结果:
如上所见,在输出值中填充了许多零。
因为zerofill,当我们插入负值会报错:Out of range value for column ...
其它插入测试结论:
- 当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。
- 若数值在其取值范围之外,则直接报Out of range value错误。
四、精度问题测试
FLOAT、DOUBLE、DECIMAL 这三种数据类型的精度问题测试
1、建表语句
DROP TABLE IF EXISTS `test_float`;
CREATE TABLE test_float(
`f1` FLOAT,
`f2` DOUBLE,
`f3` DEC(10,2)
);
2、插入测试数据
INSERT INTO test_float(f1,f2,f3) VALUES(0.47,0.47,0.47),(0.44,0.44,0.44),(0.19,0.19,0.19);
3、查询结果
SELECT SUM(f1),SUM(f2),SUM(f3) FROM test_float;
查询结果如下:
FLOAT、DOUBLE 类型求和的结果都出现了精度损失,但是 DOUBLE 的精度更高。他们求和的结果都无限接近 1.10。
4、比较结果
执行如下sql可知:
SELECT SUM(f2) = 1.1,SUM(f2) = 1.1,SUM(f3) = 1.1 FROM test_float;
0 表示 false;1 表示 true。
[转帖]MySQL定点数类型DECIMAL用法详解的更多相关文章
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- Mysql中limit的用法详解
Mysql中limit的用法详解 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,为我们提供了limit这样一个功能. SELECT * FROM table LIMIT [offset ...
- [转帖]强大的strace命令用法详解
强大的strace命令用法详解 文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, st ...
- MySQL数据类型DECIMAL用法详解
MySQL DECIMAL数据类型用于在数据库中存储精确的数值.我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据. 要定义数据类型为DECIMAL的列,请使用以下语法: ...
- mysql中in的用法详解
一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...
- mysql的event(事件)用法详解
SELECT * FROM mysql.event;SET GLOBAL event_scheduler = 1; -- 开启定时器 0:off 1:on SHOW VARIABLES LIKE 'e ...
- mysql数据库explain命令用法详解
本文转自一位前辈的文章,感觉写得很好,就转过来了.这个是那位前辈的原文地址:http://www.111cn.net/database/mysql/81698.htm 当我们在优化SQL时,想看 ...
- mysql中limit的用法详解[数据分页常用]
在我们使用查询语句的时候,经常要返回前几条或者中间某几行的数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT [offset ...
- mysql中 where in 用法详解
这里分两种情况来介绍 1.in 后面是记录集,如: select * from table where uname in(select uname from user); 2.in ...
- Mysql导入导出工具Mysqldump和Source命令用法详解
Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...
随机推荐
- Triple DES 加密解密技术解析
摘要:本文介绍了Triple DES加密解密技术,通过实例演示了加密和解密过程,并对算法原理进行了简要分析.同时,探讨了Triple DES在现代信息安全领域的应用和局限性. 3DES(Triple ...
- 华为云发布CodeArts APIMock服务,精准Mock,并行开发零等待!
本文分享自华为云社区<华为云发布CodeArts APIMock服务,精准Mock,并行开发零等待!>,作者: 华为云头条. 2023年10月10日,华为云正式发布CodeArts API ...
- GaussDB技术解读丨数据库迁移创新实践
本文分享自华为云社区<DTCC 2023专家解读丨GaussDB技术解读系列之数据库迁移创新实践>,作者:GaussDB 数据库. 近日,以"数智赋能 共筑未来"为主题 ...
- 云图说 | 通过Helm模板快速部署中间件应用
摘要:通过全容器化Helm模板,快速部署中间件应用. 云容器引擎基于Kubernetes Helm标准的模板提供统一的资源管理与调度,高效地实现了模板的快速部署与后期管理,大幅简化了Kubernete ...
- LiteOS基于Sensorhub的超声波模组移植
摘要:本文为你带来LiteOS基于Sensorhub的超声波模组移植的应用. 1.Sensor Hub LiteOS传感框架即Sensor Hub,是一个基于Huawei LiteOS物联网操作系统的 ...
- 动手实践丨基于ModelAtrs使用A2C算法制作登月器着陆小游戏
摘要:在本案例中,我们将展示如何基于A2C算法,训练一个LunarLander小游戏. 本文分享自华为云社区<使用A2C算法控制登月器着陆>,作者:HWCloudAI . LunarLan ...
- 解读8大场景下Kunpeng BoostKit 使能套件的最佳能力和实践
摘要:本次鲲鹏 BoostKit 训练营为开发者介绍如何基于鲲鹏 BoostKit 使能套件实现应用性能的加速,并重点剖析性能优化技术和关键能力. 本文分享自华为云社区<[云驻共创]" ...
- 拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
SQL Server 2016 安装 数据库-属性-权限-选择用户或角色-勾选执行权限即可.
- 动作捕捉用于验证芭蕾舞动作对脑瘫儿童的作用 NOKOV度量动作捕捉
下肢杠杆力臂功能障碍(Lever Arm Dysfunction,LAD)是常见的导致脑瘫儿童步态异常的原因,如髋内旋.股骨和胫骨之间的旋转畸形以及足的内外翻畸形等,且都与年龄的增长呈正相关. 图 ...
- Flink异步IO
本文讲解 Flink 用于访问外部数据存储的异步 I/O API. 对于不熟悉异步或者事件驱动编程的用户,建议先储备一些关于 Future 和事件驱动编程的知识. 对于异步 I/O 操作的需求 在与外 ...