字符类型

char


char(N)固定字段且允许NULL = N* ( character set:utf8=3,gbk=2,latin1=1)+1(NULL)
char(N)固定字段且不允许NULL = N* ( character set:utf8=3,gbk=2,latin1=1)

varchar

varchr(N)变长字段且允许NULL   =  N *( character set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(变长字段)
varchr(N)变长字段且不允许NULL = N * ( character set:utf8=3,gbk=2,latin1=1)+2(变长字段)


数字类型

TINYINT

TINYINT允许NULL = 1 +1(NULL)
TINYINT不允许NULL = 1

SMALLINT

SMALLINT允许为NULL =2+1(NULL)
SMALLINT不允许为NULL = 2

INT

INT允许为NULL =4+1(NULL)
INT不允许为NULL = 4

BIGINT

BIGINT允许为NULL = 8+1(NULL)
BIGINT不允许为NULL = 8

日期类型

DATETIME

日期时间型的key_len计算:(针对mysql5.5及之前版本)
DATETIME允许为NULL= 8 + 1(NULL)
DATETIME不允许为NULL = 8


日期时间型的key_len计算:(针对mysql5.6.4及之后的版本)
DATETIME允许为NULL= 5 + 1(NULL)
DATETIME不允许为NULL = 5

TIMESTAMP

TIMESTAMP允许为NULL = 4+ 1(NULL)
TIMESTAMP不允许为NULL = 4


decima

根据官方文档可以知道,decimal定义为decimal(M,D),其中,M是总的位数,D是小数点后保留的位数。
小数点前与小数点后的数字分开存储,且以9位数为1组,用4个字节保存,如果低于9位数,需要的字节数如下:

Leftover Digits Number of Bytes
-----------------------------
|0 |0 |
|1-2 |1 |
|3-4 |2 |
|5-6 |3 |
|7-9 |4 |
-----------------------------

例如:
•decimal(20,6)=> 小数点左边14位,小数点右边6位 => 小数点左边分组为5 + 9,需要3个字节+4个字节存储,小数点右边一个分组,需要3个字节存储 => 总共需要10个字节
•decimal(18,9)=> 小数点左边9位数,小数点右边9位数 => 分别使用4个字节存储 => 共需要 8个字节
•decimal(18,2)=> 小数点左边16位数,小数点右边2位数 => 分组为7 + 9,需要8个字节存储,小数点右边1个字节存储 => 共需要9个字节


•decima