在设计表的过程中,比如英雄等级,英雄id,角色id等等,这些值的位数最多在四位数,我基本都设为char型或者varchar,因为我觉得可以节省内存,不知道这样子对不对,还有我把所有字段都设为not null,希望大家能给小弟一些建议在设计数据库时
数值的选取:
状态值:tinyint
;
有限范围值:根据范围选择tinyint
(不要用enum),smallint
,mediumint
,int
, bigint
, float
, double
;
如果数值是无符号的,则设置unsigned
;
从技术上尽可能将字段设置成NOT NULL
,但如果业务上要求该字段可以为NULL
,而且如果该字段不会被建立索引,则保持NULL
,否则可以用''(空字符串)代替;
就题主所说的情况,应该选用UNSIGNED SMALLINT NOT NULL
,用char
可能有遭遇一点小坑(有兴趣的可以评论留言,明天再说,现在有点晚了)。
平时用多了就稍微记一下tinyint
,smallint
,mediumint
和int
的取值范围,前三个要求精确背出,第四个知道大概是21E左右就好了。
相比节省内存,更重要的是表结构设计,看上去你这个表的数据量可能在1W以内,内存并不是关注点。
等级 id 这些都是数字吧?
用int会节省空间
int是四个字节,char是一个字节。
理论上你将其存储为char是存储不下的吧,char是八位,最多表示0~256。如果用varchar的话还需要额外的两字节存储。
并不清楚你的数据量有多大,之前我做过每日数据增量过亿的项目,这类表字段一般使用SMALLINT类型,是不会有性能问题的。
如果是小流量系统或者说系统初期,建议还是把精力放在功能设计上,只要库不是设计的太过分,不太会留下过大的技术债务的,毕竟现在的开源组件也都很给力。