MySQL数据类型

类型

类型名称

类型说明

整数类型

tinyInt

8位二进制

 

smallint

16位二进制

 

mediumint

24位二进制

 

int(integer)

32位二进制

小数类型

float

单精度浮点数

 

double

双精度浮点数

 

decimal(m,d)

压缩严格的定点数

日期类型

year

YYYY 1901~2155

 

time

HH:MM:SS -838:59:59~838:59:59

 

date

YYYY-MM-DD 1000-01-01~9999-12-3

 

datetime

YYYY-MM-DD HH:MM:SS

1000-01-01 00:00:00~ 9999-12-31 23:59:59

 

timestamp

YYYY-MM-DD HH:MM:SS

1970-01-01 00:00:01 ~2038-01-19 03:14:07

字符类型

CHAR(M)

M为0~255之间的整数

 

VARCHAR(M)

M为0~65535之间的整数

 

TINYBLOB

允许长度0~255字节

 

BLOB

允许长度0~65535字节

 

MEDIUMBLOB

允许长度0~167772150字节

 

LONGBLOB

允许长度0~4294967295字节

 

TINYTEXT

允许长度0~255字节

 

TEXT

允许长度0~65535字节

 

MEDIUMTEXT

允许长度0~167772150字节

 

LONGTEXT

允许长度0~4294967295字节

 

VARBINARY(M)

允许长度0~M个字节的变长字节字符串

 

BINARY(M)

允许长度0~M个字节的定长字节字符串

枚举类型

ENUM

把不重复的数据存储为一个预定义的集合。

1、字符类型使用策略:

数据经常变更:CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
数据非常短:CHAR比VARCHAR在存储空间上更有效率。
PS:

使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。
尽量避免使用TEXT/BLOB类型,查询时会使用临时表,导致严重的性能开销。

2、枚举类型

ENUM存储非常紧凑,会把列表值压缩到一个或两个字节。
ENUM在内部存储时,其实存的是整数。
尽量避免使用数字作为ENUM枚举的常量,因为容易混乱。
排序是按照内部存储的整数

3、日期类型

尽量使用timestamp,空间效率高于datetime,

时间戳:可用整数来保存,如果需要存储微妙,可以使用bigint存储。

优点:具有 Timestamp 类型的所具有一些优点,并且进行日期排序以及对比等操作的效率会更高,跨系统也很方便。

缺点:数据的可读性太差了,无法直观的看到具体时间。

SQL:

将存储的整型时间戳转化:使用FROM_UNIXTIME,将时间戳转换为时间格式。

转成年-月-日 时:分:秒:

SELECT FROM_UNIXTIME(createTime) FROM user;

转成其他时间格式:自行调整后面的转换格式

SELECT FROM_UNIXTIME(createTime,'%Y-%m-%d %H:%i:%s') FROM user;

切记:

不要用字符串存储日期,原因:

1、字符串占用的空间更大

2、字符串存储的日期比较的效率较低(需要逐个字符进行比对)

3、字符串存储的日期无法用日期相关的API进行计算和比较