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 4 0 ~ 2³²-1 -2³² ~ 2³²-1 标准的整数
BIGINT 8 0 ~ 2⁶⁴-1 -2⁶⁴ ~ 2⁶⁴-1 大整数

MySQL的浮点数类型

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

以单精度浮点数类型FLOAT类型为例,它的四个字节的组成结构如下图:

MySQL的数据类型

设置最大位数和小数位数

在定义浮点数类型时,还可以在FLOAT或者DOUBLE后面跟上两个参数,如下

FLOAT(M, D)
DOUBLE(M, D)
  • M表示该小数最多需要的十进制的有效数字个数
  • D表示该小数的小数点后的十进制数字个数
类型 取值范围
FLOAT(4, 0) -9999 ~ 9999
FLOAT(4, 2) -99.96 ~ 99.99
FLOAT(4, 1) -999.9 ~ 999.9
FLOAT(5, 1) -9999.9 ~ 9999.9
FLOAT(6, 1) -99999.9 ~ 99999.9
  • 在D相同的情况下,M越大,该类型的取值范围越大;在M相同的情况下,D越大,该类型的取值范围越小。
  • M的取值范围是1~255,D的取值范围是0~30,而且D的值必须不大于M。M和D都是可选的,如果我们省略了它们,那它们的值按照机器支持的最大值来存储。

MySQL的定点数类型

  • 因为用浮点数表示小数可能会有不精确的情况,在一些情况下我们必须保证小数是精确的,所以MySQL提出一种称之为定点数的数据类型,它也是存储小数的一种方式。
类型 占用的储存空间(单位:字节) 取值范围
DECLMAL 取决于M和D 取决于M和D

储存空间

以DECLMAL(12, 4)为例

  • 首先确定小数点左边的整数最多需要存储的十进制位数是12位,小数点右边的整数需要存储的十进制位数是4位,如图所示:

MySQL的数据类型

  • 从小数点位置出发,每个整数每隔9个十进制位划分为1组,效果就是这样:

MySQL的数据类型

  • 针对每个组中的十进制数字,将其转换为二进制数字进行存储,根据组中包含的十进制数字位数不同,所需的存储空间大小也不同,具体见下表:
组中包含的十进制位数 占用的储存空间 单位(字节)
1或2 1
3或4 2
5或6 3
7或8 4
  • M的范围是1 ~ 65,D的范围是0 ~ 30,且D的值不能超过M。
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!