跳到主要内容

MySQL 的数据类型(1)

本小节主要讲解 MySQL 数据类型,MySQL 支持多种数据类型,学习好数据类型,才能更好的学习 MySQL 表的设计,让表的设计更加合理。

1.整数类型

类型大小SIGNED(有符号)UNSIGNED(无符号)说明
tinyint1字节-128~1270~255小整型
smallint2字节-32768~327670~65535小整型
mediumint3字节-8388608~83886070~16777215中整型
int4字节-2147483648~21474836470~49294967295整型
bigint8字节-9223372036854775808 ~ 92233720368547758070~18446744073709551615大整型

1.1 tinyint

tinyint 为小整数类型,存储空间为1个字节(8位),有符号范围-128 ~ 127,无符号范围 0 ~ 255,此类型通常在数据库中表示类型的字段,如某一字段 type 表示学科,其中 “type=1” 表示语文,“type=2” 表示数学, “type=3” 表示英语,此时 type 字段即可使用 tinyint 这种存储空间比较小的类型。

1.2 smallint

smallint 为小整数类型,存储空间2个字节(16位),有符号范围 -32768 ~ 32767,无符号范围 0 ~ 65535,当遇到最大值不超过 65535 的整数类型字段时,可使用无符号 smallint 类型。

1.3 mediumint

mediumint 为中整数类型,存储空间3个字节(24位),有符号范围 -8388608 ~ 8388607,符号范围 0 ~ 16777215,当遇到最大值不超过 16777215 的整数类型字段时,可使用无符号 mediumint 类型。

1.4 int

int 为整数类型,存储空间 4 个字节 ( 32位 ),有符号范围 -2147483648 ~ 2147483647,无符号范围 0 ~ 49294967295,当遇到最大值不超过 49294967295 的整数类型字段时,可使用无符号 int 类型,通常自增主键 id 使用 int 类型。

1.5 bigint

bigint 为大整数类型,存储空间8个字节(64位),有符号范围 -9223372036854775808 ~ 9223372036854775807,无符号范围 0 ~ 18446744073709551615,当遇到最大值不超过 18446744073709551615 的整数类型字段时,可使用无符号 bigint 类型,通常自增主键 id 使用 int 无法满足时,可以使用 bigint 类型。

2.浮点类型

类型大小SIGNED(有符号)UNSIGNED(无符号)说明
float4字节-3.402823466E+38 ~ -1.175494351E-38,0, 1.175494351E-38 ~ 3.402823466351E+380,1.175494351E-38 ~ 3.402 823 466 E+38单精度浮点型
double8字节-1.7976931348623157E+308 ~ -2.2250738585072014E-308, 0, 2.2250738585072014E-308 ~ 1.7976931348623157E+3080, 2.2250738585072014E-308 ~ 1.797693134862315 7E+308双精度浮点型
decimal每4个字节存储9个数字,小数点占1字节DECIMAL(M,D),取决于M和D,M是整数部分,D是小数部分DECIMAL(M,D),取决于M和D,M是整数部分,D是小数部分精确类型,常用来表示金额

2.1 float

float 为单精度浮点类型,存储空间 4 个字节,支使用标准的浮点运算进行近似计算,若想知道浮点运算是怎么计算的,则需要研究操作系统的浮点数方式,通常对小数精度要求不那么高的字段可使用 float 类型。

2.2 double

double 为双精度浮点类型,存储空间 8个字节,相比float 有更高精度和更大的范围,通常对小数精度要求不那么高,但比 float 要求更高的字段可使用 double 类型。

2.3 decimal

decimal 类型用于存储精确的小数,若使用 float 类型来取代一些需要精确小数点类型的字段时,大的数据量会导致数据错误,比如金额,若使用 float 类型,可能会丢失精度,此时对于金额这样对精度要求很高的字段来说,可以选择使用 decimal 类型。

3.小结

本小节主要介绍了 MySQL 数值类型大小和取值范围,实际应用中要根据字段在业务中实际表示的含义来选择数值字段数据类型,例如年龄字段 age 选择无符号 TINYINT 类型,金额数值对精度要求比较高,所以选择 DECIMAL 类型比较合适,时间戳类型使用 INT,对于数据量比较大的表的自增主键 id 可选择 BIGINT,具体字段类型的选择,还需要根据实际情况来综合分析,合理选择即可,字段的默认值尽量避免 NULL。