前言:在使用mysql时,我们发现一个字段会有很多选项,比如数字有int tinyint bigint 等,字符串有char,varchar等,那么我们再设计数据库时如何选择最佳的值呢?
1.数值
在使用前先问自己一个问题,字段是不是一定是纯数字呢,会不会有空格等不是数字的字符出现,如果有,请用字符串。
1. 首先我们要明白,数值分为带符号和不带符号,其原理就是把头部的一个 0或1 当做正负号,在选择的时候你要考虑好是否带符号。
2. 大小参照表
3.类型选好了,我们来讲一下size,int(size),怎么设置int()括号里面的大小呢
(1)首先我们要明白 tinyint(1)和tinyint(127),能储存的数据是一样大的,所以能储存的数据大小与size无关,只与类型有关
(2)那么size是不是就没什么用了?
我们来实践一下,我们将是status字段设为tinyint(2),并加上0填充。我们输入1,11,111分别显示为 01,11,111
在测试一下不选0填充,则为1,11,111
所以,size一般为显示的位数,这个字段一般显示几位数就选几位数,只要不加0填充其实没有太大影响
2.字符串
1.首先了解全部
字符串类型 | 字节 | 描述及存储需求 |
CHAR(M) | M | M为0~255之间的整数 |
VARCHAR(M) | M为0~65536之间的整数 | |
TINYBLOB | 允许长度0~255字节 | |
BLOB | 允许长度0~65535字节 | |
MEDUIMBLOB | 允许长度0~167772150字节 | |
LONGBLOB | 允许长度0~4294967295 | |
TINYTEXT | 允许长度0~255字节 | |
TEXT | 允许长度0~65535字节 | |
MEDIUMTEXT | 允许长度0~167772150字节 | |
LONGTEXT | 允许长度0~4294967295字节 | |
VARBINARY(M) | M | 允许长度0~M个字节的边长字节字符集 |
BINARY(M) | M | 允许长度0~M个字节的定长字节字符集 |
2.其实我们常用的只有char和varchar,我们着重了解这两个的区别
char:定长,效率高,一般用于固定长度的表单提交数据存储 ;例如:身份证号
varchar:不定长,效率偏低
char 255字节,假设编码为utf8,那么一个汉字为3个字节,那么最多存储85个字符,所以,当一个字符确定在80个汉字以下,则设置为char。(个人理解),至于size填多少,自己大约计算,将字符*3就行了(有汉字)
3.时间
前言:MySQL服务器采用了Unix的时间功能,对于TIMESTAMP值,可处理的日期至2037年。对于DATE和DATETIME值,可接受的日期可至9999年。
1.date 存储数据格式为:YYYY-MM-DD,它支持的范围为'1000-01-01'到'9999-12-31'
2.Datetime YYYY-MM-DD HH:MM:SS,它支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59',
3.TimeStamp YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00到当前的时间差值
4.Time HH:MM:SS TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。
5.year 年
6.