一、字段类型优先级
- 数字类型
- 日期类型与二进制类型
- 字符串类型
1、整数类型
整数类型
数据存储原理,innodb 默认使用16k为一页保存数据,也就是说在16k一页中,保存的数据越多,越有利于磁盘IO的处理。
2、实数类型
DECIMAL(18,9)占用9个字节,财务数据一定要使用DECIMAL
小贴士
思考:代理主键使用INT还是BIGINT?
bigint采用8字节,int使用4字节,无符号型int能保存40亿条数据,所以,一般场景下,使用int即可
2、Varchar类型
VARCHAR变体长度,根据实际内容保存数据
- 使用最小符合需求的长度
- VARCHAR(255)以下使用额外一个字节保存长度
- VARCHAR(255)以上使用额外两个字节保存长度
- VARCHAR(5)与VARCHAR(200)内存占用不同
- VARCHAR变更长度时5.6以前,会出现锁表
VARCHAR的使用场景
- VARCHAR适合存储长度波动大的数据(如博客文章)
- 字符串很少被更新的场景
- VARCHAR适合保存多字节字符
3、CAHR类型
CHAR属于定长数据
- CHAR最大长度255
- CHAR类型会自动删除未尾的空格
- CHAR检索效率比VARCHAR高
CHAR的使用场景
- CHAR适合存储长度波动不大的数据,如MD5摘要
- CHAR适合存储短字符串
- CHAR类型适合存储经常更新的字符串
4、DataTime日期类型
DATETIME日期时间类型,占用8个字节
- 与时区无关
- 可保存到毫秒
- 可保存时间范围大
PS:不要使用字符串存储日期类型
因为:字符串无法使用mysql日期函数进行操作,存储占用比datetime多
5、TIMESTAMP时间戳
√TIMESTAMP时间戳,占用4个字节
- 时间范围:1970-01-01到2038-01-19
- 精确到秒
- 采用整型存储
- 依赖于时区
- 自动更新timestamp列的值