mysql数据类型double和decimal区别详解

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt336

实数是带有小数部分的数字。然而,它们不只是为了存储小数部分,也可以使用

DEClMAL 存储比 BIGINT还大的整数。 MySQL 既支持精确类型,也支持不精确类型。

FLOAT 和  DOUBLE 类型支持使用标准的浑点运算进行近似计算。如果需要知道浮点运算是

怎么计算的,则需要研究所使用的平台的浮点数的具体实现。

DECIMAL 类型用于存储精确的小数。在 MySQL 5.0 和更高版本, DECIMAL 类型支持精确 计算。 MySQL 4.1 以及更早版本则使用浮点运算来实现 DECIAML 的计算,这样做会因为 精度损失导致一些奇怪的结果。在这些版本的   MySQL 中,DEClMAL 只是一个"存储类型"。

因为 CPU 不支持对 DEClMAL 的直接计算,所以在 MySQL 5.0 以及更高版本中, MySQL 服务器自身实现了 DECIMAL 的高精度计算。相对而言, CPU 直接支持原生浮点计算,所 以浮点运算明显更快。

浮点和 DECIMAL 类型都可以指定精度。对于 DECIMAL 列,可以指定小数点前后所允许的 最大位数。这会影响列的空间消耗。 MySQL 5.0 和更高版本将数字打包保存到一个二进 制字符串中(每 4个字节存 9个数字)。例如, DEClMAL(18 ,9)小数点两边将各存储 9个 数字,一共使用 9 个字节:小数点前的数字用 4 个字节,小数点后的数字用 4 个字节, 小数点本身占 1个字节。

MySQL 5.0 和更高版本中的 DEClMAL 类型允许最多 65个数字。而早期的 MySQL 版本中 这个限制是254个数字,并且保存为未压缩的字符串(每个数字一个字节)。然而,这些(早 期)版本实际上并不能在计算中使用这么大的数字,因为        DECIMAL 只是一种存储格式: 在计算中 DEClMAL 会转换为 DOUBLE 类型。

有多种方法可以指定浮点列所需要的精度,这会使得   MySQL 悄悄选择不同的数据类型, 或者在存储时对值进行取舍。这些精度定义是非标准的,所以我们建议只指定数据类型, 不指定精度。

浮点类型在存储同样范围的值时,通常比 DECIMAL 使用更少的空间。 FLOAT 使用 4个字 节存储。 DOUBLE 占用8个字节,相比 FLOAT有更高的精度和更大的范围。和整数类型一样, 能选择的只是存储类型 IMySQL 使用 DOUBLE 作为内部浮点计算的类型。

因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用

DECIMAL一一例如存储财务数据。但在数据量比较大的时候,可以考虑使用     BIGINT 代替

DECIMAL,将需要存储的货币单位根据小数的位数乘以相应的倍数即可。假设要存储财

务数据精确到万分之一分,则可以把所有金额乘以一百万,然后将结果存储在  BIGI町里,

这样可以同时避免浮点存储计算不精确和 DECIMAL 精确计算代价高的问题。

时间: 2024-10-02 06:36:38

mysql数据类型double和decimal区别详解的相关文章

JavaScript 基本数据类型和引用类型的区别详解

本文和大家分享的主要是javascript中基本数据类型和引用类型的一些区别用法,一起来看看吧,希望对大家学习javascript有所帮助. js基本数据类型: js基本数据类型包括:undefined,null,number,boolean,string.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值 1. 基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change"; name.substr();//h

MySQL的数据类型及其常用修饰符详解

MySQL的数据类型及其常用修饰符详解 ================================================================================ 概述: ========================================================================================== Mysql的数据类型     在mysql数据库当中,每一个库都是有多张表来组成的,每一个表都是由行和列来组

【转】MySQL用户管理及SQL语句详解

[转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysql.user; +--------+------------+-------------------------------------------+ | user | host | password | +--------+------------+---------------------------

[C]基本数据类型:整型(int)用法详解

1.整型int C语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int是整型之一,一般被称为整型.以后,在不产生歧义的情况下,我们把整数类型和int都称为整型. int代表有符号整数,也就是说,用int声明的变量可以是正数,可以是负数,也可以是零,但是只能是整数.标准规定int的最小取值范围是-32767到32767.int的取值范围因机器而异,但是一定要大于或者等于-32767到32767.一般来说,int占用一个字的内存空间.因此,字长为16位(B

mysql数据库TINYINT取值范围详解

分享下mysql中TINYINT的取值范围,很基础的一些内容. 在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127.无符号的范围是0到255(见官方<MySQL 5.1参考手册>http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types). Tinyint占用1字节的存储空间,即8位(bit).那么Tinyint的取值范围怎么来的呢?先看无符号的情况.无符号的最小值即全部8位(b

【转】Cookie和Session的区别详解

转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session 机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择 二.会话cookie和持久cookie的区别 如果不设置

Bind和Eval的区别详解

原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名") %> 区别 1.eval是只读数据,bind是可更新的. 2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %> 2.若GridView中绑定列里面 设置 内容格式 DataFormateStri

javascript中=、==、===区别详解

javascript中=.==.===区别详解今天在项目开发过中发现在一个小问题.在判断n==""结果当n=0时 n==""结果也返回了true.虽然是个小问题,却有着大影响,所以决定深入分析下.1.= 赋值运算符 //例: var n=1; console.log(n);//1 n=n+1; console.log(n);//2 2.== 值比较运算符 值比较运算符在表达式两边的数据类型不一致时,会隐式转换为相同数据类型,然后对值进行比较. //例: var a=

mysql数据库表间内外链接详解

1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制) 3. 自连接(同一张表内的连接) SQL的标准语法:select table1.column,table2.column from table1 [inner | left | right | full ] join table2 ontable1.column1 = table2.column2; inner join 表示内连接: left jo