跟我一起学习MySQL技术内幕(第五版):(第三章学习日记4)


3.2.4数字数据类型
3.2.4.1精确值数字类型
3.2.4.2近似值数字数据类型
3.2.4.3bit数据类型
———————————————————————————————
MySQL数字数据类型分为以下三大类

1.精确值类型(值会被精确保存,关于他们的计算也是精确的)
整数型:存放没有小数部分的数字。
decimal:保存带有小数部分的精确值
2.浮点类型。分为单精度和双精度。用来存放带有小数部分的数字,但可能发
生四舍五入(近似值)
3.bit类型。用于存储位域值。

下面是各数字数据类型的取值范围

类型名称              取值范围

tinyint 有符号值:-128~127(-2^7~2^7-1)
无符号值: 0~255(0~2^8-1)

smallint 有符号值: -32767~32767(-2^15~2^15-1)
无符号值: 0~65535(0~2^16-1)

meidiumint 有符号值-8388608~8388607(-2^23~2^23-1)
无符号值: 0~16777215(0~2^24-1)

int 有符号值:-2147683648~2147683647(-2^31~2^31-1)
无符号值: 0 ~ 4294967259(0~2^32-1)

bigint 有符号值: -32767~32767(-2^15~2^15-1)
无符号值: -9223372036954775808~9223372036954775807(-2^63~2^63-1)

decimal([M[,D]]) 由M和D的值决定

float[M,D] 最小非零值:+-1.175494351E-38
最大非零值:+-3.402823466E+38

double[(M,D)] 最小非零值:+-2.2250738585072014E-308
最大非零值:+-1.7976931348623157E+308

bit[(M)] 0<2^M-1,1<M<=64

数字数据类型的存储空间要求

类型名称             存储空间占用量
tinyint 1字节
smallint 2字节
mediumint 3字节
int 4字节
bigint 8字节
decimal 取决于M和D
float 4字节
double 8字节
bit [(M)] 取决于M

对于Decimal的存储空间要求取决于小数点左右两侧的数字个数,对于每一侧,每九位数字需要4个字节,最后剩下的数字需要1~4个字节。

对于bit类型,一个bit(M)值,需要大约(M+7)/8个字节的存储空间。

3.2.4.1精确值数字数据类型
一:整数类型
1.unsigned int/tinyint/……… 可以将整型定义为unsigned,以禁止出现负数,这也将其取值范围上已到了从零开始的区间

2.定义整型列时,可以指定一个可选的显示宽度M,该值必须是1~255的整数 。它决定着MySQL将会用多少个字符来显示该列里的值。如果没有指定,MySQL将会自行确定一个默认的宽度。这个默认宽度通常是该列里最长值的长度。

3.存储空间与显示宽度无关、与列的取值范围也没有关系
显示宽度只与MySQL用于显示列值时所用到的字符数相关

二 : decimal

1.decimal是一种定点类型,所有制都是一个固定的小叔叔为。不会进行四舍五入(此特性使得decimal非常适合于保存货币值)

2.decimal的同义词(numeric fixed)

3.decimal列也可以被定义为unsigned。与整数类型不同的是,把一个decimal类型定义为unsigned不会扩大该类型的取值范围,而只会砍掉整个负数部分

4.decimal的列定义中,可以包含一个最大有效位M和一个小数位数D。
期中M取值范围1~65,D的取值范围0~30,且不超过M (M D均可选, 如果省略将会使用默认值:D的默认值是0,M的默认值是10)

decimal = decimal(10) = decimal(10,0)
decimal(n) = decimal(n,0)

3.2.4.2近似值数字数据类型
float 和double两种浮点类型,用于储存近似值

1.double precision同double
2.默认情况下,real同double 启用SQL的real_as_default模式,则他会同float
3.浮点型也可以定义为unsigned。负数部分将被砍掉

类似于decimal的M和D(M的范围1~255,D的范围0~30且不超过M)
M、D可选如果忽略,将会按照硬件所支持最大精度存储。

float(p) :p表示所要求的精度位数
p的取值范围0~53 如果p落在0~24区间,列会被视为单精度列,25~53的区间里,列将被视为双精度列。也就是说,此列会根据是否带有M和D支持,来确定是float型还是double型。

3.2.4.3bit数据类型

bit数据类型可用于存放位域值。比图裂的定义里可以包含一个可选的最大宽度M,它表示的是按照二进制位计算列的宽度。M的取值必须是一个1~64的整数。如果省略,M的默认值将为1.

默认情况下 bit检索出来的值不能显示打印。要显示一个位域值的可打印形式,需要加上零或者使用cast()函数

create table t 
(
b bit(3)
);


insert into t (b) values(0),(b'101'),(b'111');
select b+0,cast (b as unsigned) from t;

结果如下:

+------+---------------------+
| b+0 | cast(b as unsigned) |
+------+---------------------+

| 0 | 0 |
| 5 | 5 |
| 7 | 7 |
+------+---------------------+

如果需要以二进制表示法来显示某些位域值或是他们以二进制形式计算后的结果,那么可以使用bin()函数:

select bin(b), bin(b & b'101'),bin( b | b'101')from t;
+--------+-----------------+------------------+
| bin(b) | bin(b & b'101') | bin( b | b'101') |
+--------+-----------------+------------------+

| 0 | 0 | 101 |
| 101 | 101 | 101 |
| 111 | 101 | 111 |
+--------+-----------------+------------------+

对于八进制和十六进制的显示,可以分别使用oct()和hex()。

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告