MySQL数据类型详解
12 Mar 2018最近发现不少同学在实际业务场景中对数据类型的选择有诸多困惑,遂写下该博文,期望能够帮助同学进一步加深对数据类型的理解。MySQL中数据类型主要包括三大类:数值型、字符型和日期型,本章将详细描述不同数据类型的名称、适用场景以及如何选择数据类型。
· 数值型
数值型数据类型主要用来存储数字,MySQL中可以把数值型数据分为两类:整数型和小数点型。整数型包括:tinyint、smallint、mediumint、int、bigint,小数点型包括:float、double、decimal(M,D),具体请见下表:
类型名称 | 具体描述 | 存储需求 |
---|---|---|
tinyint | 非常小的整数 | 1个字节 |
smallint | 较小的整数 | 2个字节 |
mediumint | 中等大小的整数 | 3个字节 |
int | 普通大小的整数 | 4个字节 |
bigint | 较大的整数 | 8个字节 |
类型名称 | 具体描述 | 存储需求 |
---|---|---|
float | 单精度浮点数 | 4个字节 |
double | 双精度浮点数 | 8个字节 |
decimal(M,D) | 定点数(M数值总位数,D小数点后位数) | M+2个字节 |
要点:
1.如果业务不需要小数部分,使用整数来保存数据,通常情况下我们会使用int整数类型,否则使用浮点数来保存数据,通常情况下我们会使用float浮点数类型;
2.浮点数float、double与定点数decimal,在长度一定的情况下,使用浮点数能表示更大的数据范围,但如果对数据精确度要求较高时,建议使用定点数来存储;
· 字符型
字符型数据类型用来存储字符串数据,MySQL支持两种字符型数据存储:文本字符串和二进制字符串,文本字符串包括:char、varchar、text、enum、set,二进制字符串包括:bit、binary、varbinary、tinyblob、blob、mediumblob、longblob,具体请见下表:
类型名称 | 具体描述 | 存储需求 |
---|---|---|
char | 固定长度的字符串 | M个字节,1<=M<=255 |
varchar | 可变长度的字符串 | L+1个字节,L<=M且1<=M<=255 |
tinytext | 非常小的字符串 | L+1个字节,L<2^8 |
text | 较小的字符串 | L+2个字节,L<2^16 |
mediumtext | 中等大小的字符串 | L+3个字节,L<2^24 |
longtext | 较大的字符串 | L+3个字节,L<2^32 |
enum | 枚举类型 | |
set | 字符串对象,可以有零或多个值 |
类型名称 | 具体描述 | 存储需求 |
---|---|---|
bit | 位字段类型 | 约M+7个字节 |
binary | 固定长度二进制字符串 | M个字节 |
varbinary | 可变长度二进制字符串 | M+1个字节 |
tinyblob | 非常小的BLOB | L+1个字节,L<2^8 |
blob | 较小的BLOB | L+2个字节,L<2^16 |
mediumblob | 中等大小的BLOB | L+3个字节,L<2^24 |
longblob | 较大的BLOB | L+4个字节,L<2^32 |
要点:
1.文本字符串和二进制字符串本质区别在于数据存储方式不同,前者多以文本的ASCII码形式存储在计算机中,后者以文本的二进制形式存储在计算机中;
2.char与varchar,char是固定长度、自动删除插入数据的尾部空格,varchar是可变长度、不会删除尾部空格,char的优势在于处理数据更快,varchar的优势在于节省存储空间;
· 日期型
MySQL中有多种表示日期的数据类型,主要包括:year、time、date、datetime、timestamp,具体请见下表
类型名称 | 具体描述 | 存储需求 | 日期范围 |
---|---|---|---|
year | YYYY | 1个字节 | 1901~2155 |
time | hh:mm:ss | 3个字节 | -838:59:59~838:59:59 |
date | YYYY-MM-DD | 3个字节 | 1000-01-01~9999-12-31 |
datetime | YYYY-MM-DD hh:mm:ss | 8个字节 | 1000-01-01 00:00:00~9999-12-31 23:59:59 |
timestamp | YYYY-MM-DD hh:mm:ss | 4个字节 | 1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC |
要点:
1.日期和时间数据类型的选择主要基于业务需求,如果只需要记录年份,则使用year类型,如果只需要记录时间,则使用time类型;
2.datetime与timestamp,若同时需要记录日期和时间,优先选择日期范围较大的datetime类型,timestamp的特点在于当插入一条记录但没有指定日期列时,MySQL会把timestamp对应字段的数值用当前时间填充;
分类: 数据库技术