基本原则
- 数字类型 > 日期、二进制类型 > 字符类型
- 占用空间小的类型 > 占用空间大的类型
整数类型
注意:int(2) 还是会占用4个字节,如果存储2个字节的整形建议使用 smallint
实数类型
举例:DECIMAL(18,9) 需要9个字节来存储。
varchar
存储的特点
- 用于存储边长字符串,只占用必要的存储空间
- 列的最大长度小于255时,则只占用一个额外字节用于记录字符串的长度
- 列的最大长度大于255时,则占用两个额外的字节用于记录字符串的长度(因此 vachar 只能最大存储65535个::字节::)
::注意: varchar(10) ,括号中的10🈯️的是字符数,并不是字节数::
长度的选择问题
- 使用最小的符合需求的长度
- varchar(5)和 varchar(200) 存储’Mysql’字符串性能不同,为了更有效的优化查询,在内存中对字符串使用的是固定的宽度
适用场景
- 字符串列的最大长度比平均长度大很多
- 字符串列很少被更新(其变长的特性,会导致存储页分裂)
- 使用了多字节字符集存储字符串
char
存储特点
- 定长的
- 会删除尾部的空格
- 最大宽度255
适用场景
- 存储长度近似的值,比如密码加密后的 MD5值、身份证、手机号
- 短字符串
- 经常被更新的字符串列
DATETIME
- 存储范围:1000-01–1 00:00:00 到 9999-12-31 23:59:59
- 存储精度:
datetime = YYYY - MM - DD HH:MM:SS
datetime(6) = YYYY -MM - DD HH:MM:SS .fraction - 与时区无关
- 占用8个字节
TIMESTAMP
- 存储范围:1970-01-01 ~ 2038-01-19
- 存储精度:YYYY-MM-DD HH:MM:SS.[fraction]
- 与时区相关
- 占用4个字节
- 在行的数据修改时可以自动修改 timestamp 列
DATE
- 范围1000-01-01 ~ 9999-12-31
- Mysql5.6
- 占用3个字节
TIME
占用3个字节
存储日期时间类型的主意事项
-
不要使用字符串类型来存储日期时间数据
- 日期类型一般比字符串类型占用空间小
- 查找过滤时,使用日期类型性能好
- 方便使用 mysql 内置的时间日期函数,对时间日期进行处理
使用 int 存储时间日期不如使用 Timestamp类型