# MySQL数据类型
🐴
# 前言
MySQL
中定义数据类型对数据库的优化是非常重要的,在MySQL
中的数据类型大致可以分为三类:
- 数值类型
- 字符类型
- 时间类型
# 数值类型
类型 | 大小及范围 | 作用 |
---|---|---|
tinyint(m) | 1个字节 范围(-128~127) | 小整数 |
smallint(m) | 2个字节 范围(-32768~32767) | 大整数 |
mediumint(m) | 3个字节 范围(-8388608~8388607) | 大整数 |
int(m) | 4个字节 范围(-2147483648~2147483647) | 大整数 |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) | 极大整数 |
float(m,d) | 4个字节 8位精度 m总个数,d小数位 | 单精度浮点数值 |
double(m,d) | 8个字节 16位精度 m总个数,d小数位 | 双精度浮点型 |
decimal(m,d) | 参数m是总个数,d是小数位 | 定点数 |
关于浮点数float
,double
,decimal
,的区别:float
在内存中占用4个字节,而double
在内存中占用8个字节,所以float
的精度没有double
高,但是同等条件下CPU处理单精度浮点数的效率要高。
在存储同样范围值时,通常decimal
使用的空间更少,一般在存储金额时会使用decimal
。
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
# 字符类型
类型 | 大小 | 说明 |
---|---|---|
char | 0-255字节 | 定长字符串 |
varchar | 0-65535 字节 | 变长字符串 |
tinyblob | 0-255字节 | 不超过 255 个字符的二进制字符串 |
tinytext | 0-255字节 | 短文本字符串 |
blob | 0-65535字节 | 二进制形式的长文本数据 |
text | 0-65535字节 | 长文本数据 |
mediumblob | 0-16777215字节 | 二进制形式的中等长度文本数据 |
mediumtext | 0-16777215字节 | 中等长度文本数据 |
longblob | 0-4294967295字节 | 二进制形式的极大文本数据 |
longtext | 0-4294967295字节 | 极大文本数据 |
char
类型是定长的,而varchar
是变长的,char(m)
存储的值长度小于m
时,MySQL
会在其右边用空格补足,而varchar
存储的值是只占用值得本身大小加上一个记录长度的一个字节。char
在处理速度上要比varchar
快,但是比较占用存储空间blob
和text
都是为存储很大的数据而设计的数据类型,分别采用二进制和字符方式存储。
# 日期时间类型
类型 | 大小 | 说明 |
---|---|---|
date | 3个字节 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 |
time | 3个字节 | 以HH:MM:SS的格式显示。比如:11:22:30 |
year | 1个字节 | 以YYYY的格式显示如:2019 |
datetime | 8个字节 | 以YYYY-MM-DD HH:MM:SS的格式显示如:2019-09-19 12:11:11 |
timestamp | 4个字节 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2019-08-19 12:11:11 |
timestamp
存储和时区相关,即会根据时区做转换,而datetime
存储和时区不相关,不会做转换;
参考文献