一、选择原则
1、越小越好:
一般情况下,应该尽量使用可以正确存储数据的最小数据类型。例如只需要存 0~200或者一些枚举类型,最好使用tinyint。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和 CPU 缓存,并且处理时需要的 CPU 周期也更少。
2、简单就好:
能用整型的尽量不用字符串类型,简单数据类型的操作通常需要更少的 CPU 周期。例如,整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较 比 整型比较更复杂。这里有两个例子:一个是应该使用 MySQL 内建的类型(date, time, datatime)而不是字符串来存储日期和时间,另一个是应该用无符号整型存储 IP 地址。
3、尽量避免NULL:
通常情况下最好指定列为 NOT NULL,除非真的需要存储 NULL 值。如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化,因为可为 NULL 的列使得索引、索引统计和值比较都更复杂。特别是计划在列上建索引,就应该尽量避免设计成可为 NULL 的列。
二、常用的字段类型的选择说明
1、数值类型
2、字符串类型
会处理尾部空格:如果存储数据末尾包含空格,则会删除末尾空格
3、浮点类型
m代表总位数,d代表小数点右边的位数。m和d又称为精度和标度
4、时间类型
三、默认值设置原则
1、字符串类型
建议默认设置Empty String,尽量不要设置NULL
原因:空值(’’)是不占用空间的,MySQL中的NULL其实是占用空间的
另外:从开发角度考虑,如果字段为空,默认NULL,接口没有做非空判断直接输出NULL,前端会直接展示NULL,这是不友好的
2、数值类型
如果有特殊情况,根据特殊情况定义,否则建议默认给 0
3、时间类型
可以根据需要设置当前时间,一般用于createTime字段等,可以省去代码层设置,数据库直接记录当前数据插入时间
并且可以勾选根据当前时间戳更新,一般用于updateTime字段等,可以省去代码层设置,当有数据更新,数据库就会根据当前时间修改此字段