精确值类型

整数类型

TINYINT (M):

所占内存空间:1个字节

取值范围:-2^7~2^7-1,即 -128到127

SMALLINT(M):

所占内存空间:2个字节

取值范围:-2^15~2^15-1

MEDIUMINT(M):

所占内存空间:3个字节

取值范围:-2^23~2^23-1

INT(M):

所占内存空间:4个字节

取值范围:-2^31~2^31-1

BIGINT(M):

所占内存空间:8个字节

取值范围:-2^63~2^63-1

Unsigned(无符号)属性修饰整数类型的意义:

相当于将区间右移,比如TINIINT,右移,起始点由-128右移到0的位置,最终范围变成了0~255。

定点数类型DECIMAL(M,D)

取值范围:

DECIMAL类型定义的时候可以包含一个最大有效位M和一个小数位D,也就是精度和小数位数。M的取值范围为1~65,D的取值范围为0~30,并且D的值不能超过M。M和D都是可选的,D的默认值为0,M的默认值为10。

注意,最大有效位=整数部分+小数部分

也就是说,整数部分的长度加上小数部分的长度就是最大有效位。

假设我们定义的为:DECIMAL(4,1),那么表示最大有效位为4,其中小数有1位,因此整数部分有3位。所以得出这个列的取值范围为:-999.9~999.9。

还有一个需要注意的问题:unsigned修饰DECIMAL类型的时候,是舍去了整个负数部分。

假设定义:DECIMAL(4,1) UNSIGNED,那么它的范围就变成了0~999.9

存储空间:

取决于小数点左右两侧数字个数,每一侧每9位数字需要4个字节,最后剩下的数字需要1~4个字节。存储空间是小数点左右两侧数值所需存储空间的总和。

剩下的数字需要1~4个字节具体为:

剩余位数:字节数

0:0

1:1

2:1

3:2

4:2

5:3

6:3

7:4

8:4

9:4

即假如剩余的数字的位数为6,则还需要3个字节来存储。

一般涉及到金钱这种斤斤计较的东西(不允许有误差),都用decimal。

整数类型和定点数类型的特点就是不会自动进行四舍五入,计算也是十分精确的。

浮点类型

单精度类型FLOAT(M,D)

存储空间:4个字节

取值范围:

最小非0值:±1.175494351E-38

最大非0值:±3.402823466E+38

双精度类型DOUBLE(M,D)

存储空间:8个字节

取值范围:

最小非0值:±2.2250738585072014E-308

最大非0值:±1.7976931348623157E+308

浮点类型说明:

unsigned修饰浮点类型:

该类型的负数部分将会去掉,只保留0到正数的部分。

省略M(最大有效位)和D(小数位数):

省略M和D的时候会根据硬件能支持的最大精度来存储。

超过精度会四舍五入。

FLOAT(p):

这种语法也是可以的。p的取值范围为0~53,如果p在0~24范围内,则该列为单精度,如果p在25~53范围内,则该列为双精度类型。

位域类型BIT(M)

取值范围:

0~2^m-1,1≤m≤64

存储空间:

取决于m,大约(m+7)/8 个字节

m为一个1到64的整数,默认值为1

加入我们创建了一个表:

Create table test (b BIT(3));

插入数据的时候格式要注意,格式为b'values',并且value只能由0和1组成:

Insert into test (b) values(b'101');

查询的时候也要注意,BIT列查出来的数值不能打印显示,需要加上0或者使用函数如cast(),bin(),oct()或者hex()

如: select b+0 from test;

查出来的结果为5

Select bin(b) from test;

查出来结果为101

显示宽度M说明:

如果没有指定显示宽度,则会以该列最长值的长度作为显示宽度。

我们创建表的时候经常会写这样的,如下:

Create table user(id int(10) zerofill,age int(3))charset utf8;

那么int(10)中的数字10就代表显示宽度。

它表示整数再数据库中显示的数字+符号的个数。

特点:

不影响数据的大小,只改变显示。可以利用zerofill,使数字变为指定格式。

Zerofill只会在数字面前补0,因此只有无符号的类型能用。




mysql 文章怎么存 mysql可以存文章吗_mysql 文章怎么存