类型选择原则
1、储存空间越少越好;
2、简单就好:例如整型比字符串更简单;
3、尽量避免null;
一、整数类型
1、有tinyint(8位)、SMALLINT(16位)、MEDIUMINT(24位)、int(32位)、bigint(64位) 这5种;
2、使用unsigned(无符号)能提升一倍的范围;
3、MYSQL能为整型类型指定宽度,例如int(11),不过这不影响计算和储存,int(11)和int(20)是一样的;只是规定mysql一些客户端显示字符的个数;
二、实数类型(浮点)
三、字符串类型
1、varchar:可变字符串长度,需要额外的储存空间保存字段长度,例如varchar(10)则需要11个字节的长度作为储存空间。更新的时候会产生碎片
适合的使用场景:最长的长度比一般的长度大的多,平时很少修改;INNODB引擎会把过长的varchar变为BLOB;
2、char:定长字符串,适合放MD5值等固定长度的字段,而且同样是char(10)和varchar(10),前者比后者少一个字节(varchar10需要11个字节);
3、blob(二进制)和text(有字符集的类型)类型:两者都是
4、enum枚举类型(以后再看)
四、时间类型
一般的时间类型都是没有代替品的,唯一可能接近混淆的是datetime和timestamp
五、范式化与反范式化
范式化-为了更省磁盘空间,更新时候涉及的磁盘位置更少,但是牺牲了查询速度;
反范式化-牺牲更多的磁盘空间,但是换来了查询的速度;