mysql数字类型

在创建表的时候,我们需要根据需求来创建,所以要选择合适的数据类型。

MySQL中主要有三种数据类型:数值型、字符串型和日期时间型。

今天,我们从数值类型开始。

类型

大小

范围(符号)

范围(无符号)

使用

TINYINT

1字节

(-128,127)

(0,255)

小整数值

ALLINT

2字节

(-32 768,32 767)

(0,65 535)

大整数值

介质

3字节

(-8 388 608,8 388 607)

(0,16 777 215)

大整数值

INT或INTEGER

4字节

(-2 147 483 648,2 147 483 647)

(0,4 294 967 295)

大整数值

BIGINT

8字节

(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)

(0,18 446 744 073 709 551 615)

最大整数值

漂浮物

4字节

(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)

0,(1.175 494 351 E-38,3.402 823 466 E+38)

单精度
浮点值

两倍

8字节

(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)


浮点数

小数

对于小数(M,D),如果M >;D,M+2,否则D+2。

取决于m和d的值

取决于m和d的值

小数值

了解了计算机的基本知识,我们知道在计算机中,1字节等于8位,每一位可以存储一个0或1。

数值型分为整型和浮点型。

现在我们以tinyint为例,来理解为什么整形手术会如表所示。

TINYINT的大小为1字节,相当于8位。我们可以把它想象成八个并排的盒子,每个盒子代表1bit。

一个

2

1字节

我们先来看看TINYINT无符号时的范围:

1号~ 8号每个盒子可以放0或1,所以总共可以组成:

2*2*2*2*2*2*2*2=256,也就是说这八个盒子可以形成256种不同的排列。

当所有数字1到8都置0时,获得最小值0000 0000(2)。

11111111(2)的最大值是在1到8的所有数字都放入1时得到的。

转换成十进制数,取值范围为0~255。

签名时TINYINT的范围:

对于计算机来说,一个有符号数的“正”和“负”是机器无法识别的,但由于正和负是两种完全不同的状态,所以在计算机中规定“0”表示“正”,“1”表示“负”,并把它们放在有效位数的前面,组成一个有符号数。

带有“数字”符号的数字称为机器号,带有“+”和“-”符号的数字称为真值,例如:

在机器中,符号数(整数)+110 0000表示为0 100 000。

那么我们现在知道TINYINT类型的数值在计算机中表示为

符号位

数字位

第一位是符号位,后七位是数字位。

原码形式

原始代码是机器数量的最简单表示。符号位为0表示正数,符号位为1表示负数,数值为正数的绝对值。上面说的+1100000台机器的数量,意思是0 1100000,是原码。

同样,真值为-1000000的原始代码是1 1000000。

需要注意的是,原码中的零根据符号位的不同分为“+0”和“-0”,它们并不相等。

2*2*2*2*2*2*2-1=128-1=127

TINYINT的原代码范围是-127到127。

原代码的优点是容易用真值转换。

原码的缺点是当两个操作数符号不同时使用时,需要判断数的大小,最终结果按较大的数判断。很麻烦。

补充

为了克服原始代码的缺点,人们提出了补充。

补数的作用是找到一个与负数等价的正数而不是负数,这样在计算中就可以用减法代替加法。

在介绍补码之前,我们先了解一下模块的概念。

个人认为模块是用来表达最大容量的。比如一个钟,最多有12(1~12)个小时,模数是12,一周有7(1~7)天,模数是7。

例如:时钟指示6点钟。如果想让它指示3点,可以顺时针转动分针9次,逆时针转动3次,结果一致。

6-3=3

6+9=15

但是时钟最多有12点,没有15点,多出来的一个从12点,1点,2点,3点开始。所以,“-3”和“+9”在钟表中是等价的,我们也说“-3”的补码对于12模是“+9”。

我们还发现正数“+9”等价于“-3”,而不是负数。

注意:对于正数,补数是它本身。

我们可以总结如下:

一个负数可以用它的正补数替代,正补数可以用模加负数本身求得。一个正数和一个负数互为补数时,它们的绝对值为模正数的补数为它本身

当模和补码的概念应用到计算机上时,就出现了补码的机号。

以TINYINT为例。

原始代码表明范围是

-127~-1 -0 +0 +1~+127

TINYINT的容量是127*2+2=256,所以它的模数是256。

原码取值范围为1111 1111 ~0111 1111。

1111 1111(-127)的补码是1000 0000(2)-111 1111(2)= 10000001。

1111 1110(-126)的补数是1000 0000(2)-111 1110(2)= 10000010。

1111 1101(-125)的补码是10000000 (2)-111101 (2) = 10000011。

1111 1100(-124)的补数是1000 0000 (2)-111100 (2) = 10000100。

……

1000 0001(-1)的补码是1000 0000 (2)-000 0001 (2) = 1111111。

1000 0000(-0)的补数是1000 0000(2)-000 0000(2)= 1000 00000。

正数的补数是它本身。

我们发现当所有的负原码都转换成补码时,负补码的取值范围是1000 0001~1111 1111。

我们发现“-0”的补码是1000 00000,占了9个方块,放到8个方块里,只有最高位是000 00000。

同“+0”0000 0000的补码。

补码里还有1000 0000个没用的数字,所以人们规定-128的补码是1000 0000。

补码的范围是1000 0000~1111 1111

为-128~127

负数在计算机中用补码表示,所以TINYINT有符号数的表示范围是-128~127。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论