mysql数字类型numberic_mysql numberic types ---- mysql 数值类型详解

编程语言中大多都有数据类型一说、虽然mysql 的sql 语句与标准sql 有别、但是宏观上看还是差不多的;下面我们说一下mysql数据库中的数值类型

一、在mysql里有那些类型可以表示数值:

1、总体上看mysql 对数值类型的分类,可以分为整型(整数),浮点型(小数点的数)

整型:

bit [(m)]

tinyint [(m)] [unsigned] [zerofill]

smallint [(m)] [unsigned] [zerofill]mediumint[(m)] [unsigned] [zerofill]

int [(m)] [unsigned] [zerofill]

bigint [(m)] [unsigned] [zerofill]bool--它是tinyint(1) 的别名

serial [(m)] [unsigned] [zerofill] --它是bigint unsigned not null auto_increment unique 的别名

浮点型:

decimal [(m,d)] [unsigned] [zerofill]

float [(m,d)] [unsigned] [zerofill]

double [(m,d)] [unsigned] [zerofill]

dec [(m,d)] [unsigned] [zerofill] --它是decimal 的别名

numerric [(m,d)] [unsigned] [zerofill] --它是decimal 的别名

fixed [(m,d)] [unsigned] [zerofill] --它是decimal 的别名

double precision [(m,d)] [unsigned] [zerofill] --它是double 的别名

real [(m,d)] [unsigned] [zerofill] --它是double 的别名

二、整数类型中的 m 表示什么意思:

1、对于bit 来说 m 表示要保存的二进制位的长度,最大为64。

2、对于其它整数来说 m 表示的是数值的展示长度,还刻生活中的1号,我们有时候也写成0001号吗?这里把1展示成0001

就是说它的展示长度是4位;1只有一位,0001有四位,生活中我们的大脑自动用0来补充了前面的三个空位,但是在MySQL

中我们要为它显示的指定 zerofill 属性。

3、例子

mysql> create table t(x int(4)); --4位展示宽度

Query OK, 0 rows affected (0.00sec)

mysql> insert into t(x) values(1),(22),(333),(4444),(55555);

Query OK,5 rows affected (0.00sec)

Records:5 Duplicates: 0 Warnings: 0mysql> select * from t; --没有和zerofill 配合是看不要m的效果的

+-------+

| x |

+-------+

| 1 |

| 22 |

| 333 |

| 4444 |

| 55555 |

+-------+

5 rows in set (0.00sec)

mysql> alter table t modify column x int(4) zerofill; --加上 zerofill 属性

Query OK, 5 rows affected (0.02sec)

Records:5 Duplicates: 0 Warnings: 0mysql> select * fromt;+-------+

| x |

+-------+

| 0001 |

| 0022 |

| 0333 |

| 4444 |

| 55555 |

+-------+

5 rows in set (0.00 sec)

三、浮点数中的 m 与 d :

1、m 表示总长度(小数点前的位数 + 小数据点后的位数)

2、d  表示小数点后的位数,这两个数据中可以推出一个等式   小数据点前的位数 = m - d

3、例子:定义一个列 x 小数点前只能保存两位数,小数据点后只能保存两位数

mysql> create table t(x decimal(4,2)); --定义decimal 类型的x 只能保存2位整数,和2位小数

Query OK, 0 rows affected (0.01sec)

mysql> insert into t(x) values(1.1),(22.22); --满足定义

Query OK, 2 rows affected (0.01sec)

Records:2 Duplicates: 0 Warnings: 0mysql> insert into t(x) values(1.111); --小数部分超出范围会被舍去

Query OK, 1 row affected, 1 warning (0.00sec)

mysql> select * fromt;+-------+

| x |

+-------+

| 1.10 |

| 22.22 |

| 1.11 |

+-------+

3 rows in set (0.01sec)

mysql> insert into t(x) values(333.22); --整数部分超出范围会报错

ERROR 1264 (22003): Out of range value for column 'x' at row 1

四、数值类型中的unsigned 、zerofill:

1、unsigned 专业点来说这个叫无符号、所以负数就保存不了,了! 把之前存负数的空间也都用来保存正数, 所以能保存的正数的数量就多了。

2、zerofill 表示当数值的长度小了展示宽度时,用0 去填充那些不足的宽度(可以见二当中的例子)。

3、如果为一个列指定了zerofill 属性 那么mysql会自己为列加上unsigned 属性。

五、各个类数值列所占空间的大小:

1、整数

type storage(byte) min max

tinyint 1 -128 127

smallint 2 -32768 32767mediumint3 -8388608 8388607

int 4 -2147483648 2147483647

bigint 8 -9223372036854775808 9223372036854775807

2、浮点数

type storage(byte) min max

float 4

double 8

3、decimal

官方文档中没有看到相关的内容,我猜这可能是用的大数算法;就是说decimal(m,d) 会战用m 个字节!这样做虽然占空间,但是

它有一个好处就是可以精确的保存值;不像float 和double 这类的数据类型只能保存近似值!

----

学习交流

63f4d86ebfdd22b5e008cb7d073616f4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值