# 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存储和时区不相关,不会做转换;
参考文献