千家信息网

mysql小数可用的类型有哪些

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,小编给大家分享一下mysql小数可用的类型有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql小数可用的类型:1
千家信息网最后更新 2025年01月20日mysql小数可用的类型有哪些

小编给大家分享一下mysql小数可用的类型有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

mysql小数可用的类型:1、FLOAT类型,可以存储单精度浮点数;2、DOUBLE类型,可以存储双精度浮点数;3、DECIMAL类型,用于存储精确的数值,例如会计系统中的货币数据。

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

MySQL 中使用浮点数和定点数来表示小数。

浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。

浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。

浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。

下表中列出了 MySQL 中的小数类型和存储需求。

DECIMAL 类型不同于 FLOAT 和 DOUBLE。DOUBLE 实际上是以字符串的形式存放的,DECIMAL 可能的最大取值范围与 DOUBLE 相同,但是有效的取值范围由 M 和 D 决定。如果改变 M 而固定 D,则取值范围将随 M 的变大而变大。

从上表中可以看到,DECIMAL 的存储空间并不是固定的,而由精度值 M 决定,占用 M+2 个字节。

FLOAT 类型的取值范围如下:

  • 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。

  • 无符号的取值范围:0 和 -1.175494351E-38~-3.402823466E+38。

DOUBLE 类型的取值范围如下:

  • 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。

  • 无符号的取值范围:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。

注意:不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。

FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度,DECIMAL 如果不指定精度,默认为(10,0)。

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会引起精度问题。

DECIMAL类型

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数据类型一样,DECIMAL类型也具有UNSIGNEDZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。

如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。

以下示例使用DECIMAL数据类型定义的一个叫作amount的列。

amount DECIMAL(6,2);

在此示例中,amount列最多可以存储6位数字,小数位数为2位; 因此,amount列的范围是从-9999.999999.99

MySQL允许使用以下语法:

column_name DECIMAL(P);

这相当于:

column_name DECIMAL(P,0);

在这种情况下,列不包含小数部分或小数点。

此外,我们甚至可以使用以下语法。

column_name DECIMAL;

在这种情况下,P的默认值为10

MySQL DECIMAL存储

MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储DECIMAL值。它将9位数字包装成4个字节。

对于每个部分,需要4个字节来存储9位数的每个倍数。剩余数字所需的存储如下表所示:

剩余数字
00
1-21
3-42
5-63
7-94

例如,DECIMAL(19,9)对于小数部分具有9位数字,对于整数部分具有19位= 10位数字,小数部分需要4个字节。 整数部分对于前9位数字需要4个字节,1个剩余字节需要1个字节。DECIMAL(19,9)列总共需要9个字节。

MySQL DECIMAL数据类型和货币数据

经常使用DECIMAL数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法 -

amount DECIMAL(19,2);

但是,如果您要遵守公认会计原则(GAAP)规则,则货币栏必须至少包含4位小数,以确保舍入值不超过$0.01。 在这种情况下,应该定义具有4位小数的列,如下所示:

amount DECIMAL(19,4);

MySQL DECIMAL数据类型示例

首先,创建一个名为test_order的新表,其中包含三列:iddescriptioncost

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_orderMODIFY cost DECIMAL(19,4) zerofill;

第五步,再次查询test_order表。

SELECT * from test_order

查询结果

如上所见,在输出值中填充了许多零。

因为zerofill,当我们插入负值会报错:

INSERT INTO test_order(description,cost)VALUES('test', -100.11);提示:[SQL]INSERT INTO test_order(description,cost)VALUES('test', -100.11)[Err] 1264 - Out of range value for column 'cost' at row 1

其它插入测试结论:

当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。

若数值在其取值范围之外,则直接报Out of range value错误。

以上是"mysql小数可用的类型有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

类型 小数 范围 数据 精度 存储 点数 字节 数字 位数 部分 货币 语法 定点 属性 情况 数值 符号 精确 会计 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 确保奥运会网络安全的具体措施 承建软件开发属于研发吗 网络安全三权分立标准 现代网络技术使人疏远 常州数据网络技术有哪些 朔州市法学会网络安全 腾讯云数据库交付运维工程师 怎么架设代理服务器 领导视察网络安全检查 软件开发总结报告的背景 云服务器是按什么收费 敦煌遗书数据库项目 数据库平均时长 福建互联网会展科技馆设计 风电场网络安全应急演练方案 打造服务器文件管理系统 软件开发学习课堂 东莞智能软件开发咨询 公安局网络安全大队好吗 中国报纸全文数据库知识导航 黄浦区会计数据库系统职能 微型计算机三级网络技术 搭建mc服务器需要多少钱 委托书模板软件开发 哪个公司的云计算服务器最好 ftp服务器第三方软件 关于防网络安全的古诗 己酮可可碱注射万方数据库 软件开发企业纳税人身份 安全防控软件开发项目合同书
0