Mysql中NUMERIC和DECIMAL类型区别比较

decimal(numeric ) 同义,用于精确存储数值 。

decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal 数据类型存储了一个准确(精确)的数字表达法;不存储值的近似值。

定义 decimal 的列、变量和参数的两种特性如下:

p 小数点左边和右边数字之和,不包括小数点。如 123.45,则 p=5,s=2。
指定精度或对象能够控制的数字个数。

s
指定可放到小数点右边的小数位数或数字个数。

p 和 s 必须遵守以下规则:0 <= s <= p <= 38。

numeric 和 decimal 数据类型的默认最大精度值是 38。在 Transact-SQL 中,numeric 与 decimal
数据类型在功能上等效。

当数据值一定要按照指定精确存储时,可以用带有小数的 decimal 数据类型来存储数字。

转换 decimal 和 numeric 数据
对于 decimal 和 numeric 数据类型,Microsoft® SQL Server™
将精度和小数位数的每个特定组合看作是不同的数据类型。例如,decimal(5,5) 和 decimal(5,0) 被当作不同的数据类型。

在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric 数据值,且必然使用最小的精度和小数位数。例如,常量 12.345
被转换为 numeric 值,其精度为 5,小数位为 3。

从 decimal 或 numeric 向 float 或 real 转换会导致精度损失。从
int、smallint、tinyint、float、real、money 或 smallmoney 向 decimal 或 numeric
转换会导致溢出。

默认情况下,在将数字转换为较低精度和小数位数的 decimal 或 numeric 值时,SQL Server 使用舍入法。然而,如果 SET
ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误。若仅损失精度和小数位数,则不会产生错误。

笔者,最近在研究mysql的decimal数据类型,现把数据实验结果公布如下

数据库版本:Server version:
5.0.45 Source distribution

1、创建表结构

 代码如下 复制代码

create table ta (a float,b decimal(10,5));

2、插入数据

 代码如下 复制代码

insert into ta (a,b)
values(1,12345.123423);

实际插入的b列数据为:12345.12342

 代码如下 复制代码

insert into ta (a,b) values(1,123456.1234);

实际插入的b列数据为:99999.99999

结论:decimal数据类型,

1、当插入的整数部分的值超过了其表示范围后就直接忽略了小数部分的值,并以最大值填充。

2、当整数部分合法,小数部分多余的位数,直接截断。

二、numeric(M,D)

当看到numeric数字 http://www.111cn.net/database/mysql/55524.htm 类型后,大部分都会看成了number,我也几次都弄错了。

numeric数字类型和decimal数字类型的一样的

修改a列字段类型: alter table ta change a a numeric(10,5);

 代码如下 复制代码

show create table ta;
| ta    | CREATE TABLE `ta` (
`a`
decimal(10,5) default NULL,
`b` decimal(10,5) default NULL
) ENGINE=MyISAM
DEFAULT CHARSET=utf8 |

可见,在myslq5.0中,numeric和decimal数据类型是一致的,两者的精度均准确为M位数字

时间: 2024-08-06 09:28:40

Mysql中NUMERIC和DECIMAL类型区别比较的相关文章

mysql中timestamp,datetime,int类型的区别与优劣

mysql中timestamp,datetime,int类型的区别与优劣 int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datetime 1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值. 3. 实际格式储存(Just stores what you have stored and retrieves the same thing

mysql中char与varchar的区别分析

原文网址:http://www.jb51.net/article/23575.htm mysql中char与varchar的区别分析 作者: 字体:[增加 减小] 类型:转载 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符 varchar(13) 可变长 如'w

Mysql如何查字段的长度,Mysql中length()、char_length()的区别

1.今天发生了一件有意思的事情,传输的数据大于标准定的字段长度了,我把字段长度调大了,把数据传输过来了.谁知道,人家的数据不符合标准,要删除了重新搞,那么你如何将超长的数据删除呢,或者将超长的数据查询出来. 答:剧透一下,其实使用char_length()查询出来的,就可以把这些删除掉,然后将调大的字段长度调小就行了.备注,我实际操作的字段都是中文字符哈,别再写教程写出血案了. 2.先了解一下,Mysql中length().char_length()的区别. 1).length():mysql里

MySQL中日期和时间类型

1 日期类型 MySql中关于日期的类型有Date/Datetime/Timestamp三种类型. 日期赋值时,允许"不严格"语法:任何标点符都可以用做日期部分或时间部分之间的间割符.例如,'98-12-31 11:30:45'.'98.12.31 11+30+45'.'98/12/31 11*30*45'和'[email protected]@31 11^30^45'是等价的,对于不合法的将会转换为:0000-00-00 00:00:00 1.1 Date格式 此类型的字段,存储数据

用count(*)还是count(列名) || Mysql中的count()与sum()区别

Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` varchar(20) default NULL, `score` tinyint(4) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 插入一些数据, insert into result values ('张三','数学',90), ('张三

(转)MySQL中In与Exists的区别

背景:总结mysql相关的知识点. 如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件. select * from user where exists select * from user); #等价于 select * from user where exists (select 1); in查询就是先将子查询条件的记录全都查出来,假设结果集为B,共有m条记录,然后再将子查询条件的结果集分解成m个,再进行m次查询. select * from us

mysql 中Varchar 与char的区别

一.字符与字节与编码关系 ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制.最小值0,最大值255. UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节. Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节. 二.Varchar与char区别 char固定长度的类型:char(M)类型的数据列里,每个值都占用M个字节,如果某个长

mysql中redo和binlog的区别

影响MySQL中redo的配置参数: innodb_log_file_size:指定每个redo日志大小,默认值48MB innodb_log_files_in_group:指定日志文件组中redo日志文件数量,默认为2 innodb_log_group_home_dir:指定日志文件组所在路劲,默认值./,指mysql的数据目录datadir 查看innodb配置: mysql> show variables like 'innodb%log%'; +---------------------

MySQL中整各种int类型的范围和存储大小

MySQL中中的整数类型int主要有如下几种: tinyint 的范围是-128~127: int的范围是-2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字),存储大小为4个字节: bigint的范围是 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节: smallint unsigned的范围是 –2^15(