目标:
1:掌握mysql数据三大数据类型(数据、日期、字符串)的分类!主要掌握int、decimal(小数)、varchar、time
2:知道选择一种合适的数据库数据类型的好处
你问我答:为什么要有不同的数据库数据类型的分类
答:MySQL定义数据字段的类型(数据类型)对数据库的优化是非常重要的,MySQL数据库常见三种数据类型为数值(整形、浮点型)、日期/时间、字符串
一:MySQL数据库三大数据类型【数值(整形与浮点型)、日期、字符串】的分类!
1.数值——整形数据类型分类:
应用场景:
1:存储一个班级学生的年龄选择TINYINT整形类型(因为年龄最大不超过255),这样占用的空间最少还能存储数据
2:存储中国人数选择INT整形类型(因为之前的类型范围不够),INT范围是42亿多呢,够用,用BIGINT的话就浪费资源,没有达到优化数据库的目的
注意事项:
1:在存储数据时同一数据类型的不同分类对数据库的优化是非常重要的!
2:最常用的两大整形即 tinyint与int
数值——浮点型数据类型分类
注意事项:除了float与double浮点数类型,decimal 类型也可以表示小数,decimal定义的小数更加精确
浮点数定义方式: | float(5,2):表示一个小数数值,数字一共5个,小数点后有两位小数数值,比如 123.65 、256.06、888.99都是满足的 decimal(5,2):与float(5,2)表示一样,只不过用 decimal 定义小数更加精确 |
---|---|
2.字符串数据类型分类
数据库字符串类型常见分类:char、varchar、text、enum、set
定长字符类型——char
适用场景:存储字符长度固定的字符串,比如说中国邮政编码、手机号、身份证号等
定义形式:字段名称 char(字符个数)
特点:
1:最长储存255个字符
2:如果实际写入的字符不足设定长度,内部会自动用空格填充到设定的长度,例如 char(5)存储数据 he(两个字符长度),但 是却占用五个字符的空间(补全空格)
3:相对于varchar,读取数据速度更快
变长字符类型——varchar
适用场景:存储的字符长度不确定,比如姓名、用户名等
定义形式:字段名称 varchar(字符个数)
特点:
1:最大可存储65535(2的16次方减1)个字节的字符
**
注释:
• 一个英文字符占用一个字节
• UTF-8编码的中文字符占用三个字节
• GBK编码的中文字符占用两个字节
2:当存储的字符长度小于设定的长度时,按照实际的长度存储,例如varchar(5)存储he,实际占用三个字符(最后是/0)的空间,这是与char的区别
3:相较于char,存取数据速度更快
注意事项:char最大存储255个字符,varchar最大存储65535个字节
长文本类型——text
适用场景:较长文章的存储,最长可存储65535(2的16次方减1)个字符,如果需要更长的字符可选择 mediumtext(1600万左右)或longtext(40亿左右)
定义方式:字段名称 text
注意事项:
1:长文本类型不能设置默认字符长度
2:text类型的数据不存在行中
3:mediumtext(1600万左右)或longtext(40亿左右)都是字符
4:65535个字符大约 64kb
5:utf-8的编码 text存储的字符数可能减半
枚举类型——enum、set
概念:在定义字段时预先规定好几个值,然后插入数据时只能从这几个规定好的值中选择一个
适用场景:字段插入数据时,有固定的几个值,比如性别、星期、月份时可用枚举类型
定义方式:gender enum(“男”,“女”),这样在插入数据时,只能选择男或者女
注意事项:
1:一个enum最多可存储65535个值
2:利用enum设置的字段最终只占用1或2个字节的空间,比较节省空间
3:枚举类型的enum与set的不同是,enum只能从枚举的数据中选取一个,而set可以从枚举的类型中选取多个!
3.日期数据类型分类
你问我答:datatime类型与timestamp类型都是定义到年月日时分秒,他俩有啥不同呢?
答:定义时间的范围不同 datatime定义的范围是1000-01-01 00:00:00/9999-12-31 23:59:59
而timestamp定义的范围是1970-01-01 00:00:00 / 2038-1-19 11:14:07
二:知道选择一种合适的数据库数据类型的好处
好处1:节省数据库空间
好处2:增加数据的查询效率
好处3:优化数据库