MySQL基础 - 数据类型

学生基本信息表 

学号 姓名 性别 身份证号 学院 专业 入学时间
20180101 杜子腾 158177199901044792 计算机学院 计算机科学与工程 2018-09-01
20180102 杜琦燕 151008199801178529 计算机学院 计算机科学与工程 2018-09-01
20180103 范统 17156319980116959X 计算机学院 软件工程 2018-09-01
20180104 史珍香 141992199701078600 计算机学院 软件工程 2018-09-01
20180105 范剑 181048200008156368 航天学院 飞行器设计 2018-09-01
20180106 朱逸群 197995199801078445 航海学院 电子信息 2018-09-01

表里的一行就代表一个学生的基本信息,这一行中的某一列就代表这个学生基本信息中的一项属性,也就是说学号是学生的一项属性、姓名也是学生的一项属性,其他的列也都是这个学生的属性。但是这些属性都有一定格式,比如说学号必须是整数格式的,入学时间必须是日期格式的,其他的属性都是字符串格式的,不同格式的数据是不能随便乱填的,你把一个日期格式的数据填在了性别里,岂不是闹出了笑话。所以设计MySQL的大叔们针对属性的不同格式定义了不同的数据类型,我们接下来就要详细唠叨MySQL中具体有哪些数据类型。

小贴士: 身份证号由于最后一位可能是X,所以就归为字符串了。

数值类型

整数类型

进制

long long ago,原始人是没有现在的人这么聪明的,只会用十分简单的东西计数。比方说他们只会使用麦秆来统计猎物数量,每收获一个猎物就在麦秆堆里添加一支麦秆,所以如果猎物多的话,麦秆就会累积很多,数都数不过来。后来人们发现不用这么笨,可以把麦秆折叠成不同的形状来代表不同的数量。普通的麦秆就代表1,也就是说每添加一只猎物就多放一只普通麦秆;如果当前已经放了9根普通的麦秆,此时再添加了一只猎物,就用一个心形麦秆来取代之前的9根普通麦秆;假如当前已经有了9根心形麦秆和9根普通麦秆时又添加了一只猎物的话,就用一根矩形麦秆来替代之前所有的麦秆。像这种每逢10个数向前进一位的计数方法就叫做十进制,这样他们就可以用很少的麦秆来表示很大的数字了。

如果在计数的时候每逢8个数就往前进一位就是八进制,每逢9个数就往前进一位就是九进制。生活中常用的进制除了十进制外,还有钟表里用来统计时间的十二进制和六十进制,用在计算机里的二进制和十六进制。 以十进制数字109为例,它表示有1个10²,加0个10¹,加9个10⁰,用数学符号表示就是:

109 = 1 × 10² + 0 × 10¹ + 9 × 10⁰ 

这个数字也可以这么表示:

109 = 1 × 8² + 5 × 8¹ + 5 × 8⁰  

也就是从八进制的逢8进一的角度上考虑,这个数可以被表示为155(八进制)。当然这个数也可以这么写:

109 = 1 × 2⁶ + 1 × 2⁵ + 0 × 2⁴ + 1 × 2³ + 1 × 2² + 0 × 2¹ + 1 × 2⁰  

也就是从二进制的逢2进一的角度上考虑,这个数也可以被表示为:1101101(二进制)。又因为计算机中8个比特位代表一个字节,平时都是用若干个字节来表示一个整数,假如用1个字节表示109的话,那效果就是这样:01101101(二进制),假如用两个字节表示十进制数109的话,那效果就是这样:0000000001101101(二进制)。

MySQL的整数类型

很显然,使用的字节数越多,意味着能表示的数值范围就越大,但是也就越耗费存储空间。根据表示一个数占用字节数的不同,MySQL把整数划分成如下所示的类型:

类型 占用的存储空间(单位:字节) 无符号数取值范围 有符号数取值范围 含义
TINYINT 1 0 ~ 2⁸-1 -2⁷ ~ 2⁷-1 非常小的整数
SMALLINT 2 0 ~ 2¹⁶-1 -2¹⁵ ~ 2¹⁵-1 小的整数
MEDIUMINT 3 0 ~ 2²⁴-1 -2²³ ~ 2²³-1 中等大小的整数
INT(别名:INTEGER 4 0 ~ 2³²-1 -2³¹ ~ 2³¹-1 标准的整数
BIGINT 8 0 ~ 2⁶⁴-1 -2⁶³ ~ 2⁶³-1 大整数

TINYINT为例,用1个字节,也就是8个位表示有符号数的话,就是既可以表示正数,也可以表示负数的话,需要有一个比特位表示正负号。但是如果表示无符号数的话,也就是只表示非负数的话,就不需要表示正负号,这是有符号数无符号数的区别。具体每个类型的取值范围是如何计算出来的我们这就不唠叨了,可以找一本计算机基础的书看看。

小贴士: 如果觉得讲解计算机基础的书籍太过晦涩,没关系,等我~

浮点数类型

用二进制表示十进制小数

浮点数是用来表示小数的,我们平时用的十进制小数也可以被转换成二进制后被计算机存储。比如9.875,这个小数可以被表示成这样:

9.875 = 8 + 1 + 0.5 + 0.25 + 0.125 = 1 × 2³ + 1 × 2⁰ + 1 × 2⁻¹ + 1 × 2⁻² + 1 × 2⁻³ 

也就是说,如果十进制小数9.875转换成二进制小数的话就是:1001.111。为了在计算机里存储这种二进制小数,我们统一把它们表示成a × 2ⁿ的科学计数法的形式,其中1≤|a|<2,比如1001.111可以被表示成1.001111 × 2³,我们把小数点之后的001111称为尾数,把中的3称为指数,然后只需要在计算机中的比特位中表示出尾数指数就行了。另外,小数也有正负之分,我们还需要单独的部分来表示小数的正负号。综上所述,表示一个浮点数需要下边几个部分:

  • 符号部分,占用1个比特位即可。

  • 指数部分,视具体浮点数格式而定。

  • 尾数部分,视具体浮点数格式而定。

MySQL的浮点数类型

很显然,我们表示一个浮点数使用的字节数越多,表示尾数指数的范围就越大,也就是说可以表示的小数范围就越大,设计MySQL的大叔根据表示一个小数需要的不同字节数定义了如下的两种浮点数类型:

类型 占用的存储空间(单位:字节) 绝对值最小非0值 绝对值最大非0值 含义
FLOAT 4 ±1.175494351E-38 ±3.402823466E+38 单精度浮点数
DOUBLE 8 ±2.2250738585072014E-308 ±1.7976931348623157E+308 双精度浮点数

以单精度浮点数类型FLOAT类型为例,它占用的4个字节的各个组成部分如下图所示:

image_1df5js9982v3qai1tne14db17b89.png-78kB

 

另外需要注意的是,虽然有的十进制小数,比如1.875可以被很容易的转换成二进制数1.111,但是更多的小数是无法直接转换成二进制的,比如说

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋同学shl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值